精選文章

matplotlib.pyplot 錯誤: TypeError: *value* is not a string | Python語法

情況:
從csv檔,用panda讀做dataframe,分析資料,在畫圖時遇到的問題

df = pd.read_csv(csv_path) # read csv檔成dataframe order = ['model_name', ...] # 根據csv的column title,選擇想要的columns df = df.reindex(columns=order) # 將df的column根據order順序重新排列 df = df.dropna() # 把df中row有NAN值的row刪去 y = df.iloc[0, 1:].values # 取得[0列, 1行之後]的dataframe值 x = np.arange(y.shape[0]) # 根據y的長度,產生x ax.scatter(x=x, y=y)
錯誤:
---> 9     ax.scatter(x=x, y=y)
TypeError: 0.77520579 is not a string
檢查:
print(x)
print(y)
print(type(x))
print(type(y[0]))
print(x.shape)
print(y.shape)
print(type(df.iloc[1,1]))
>> [ 0  1  2  3  4  5  6  7  8  9 10 11 12]
>> ['0.79871815 ' 0.77520579 0.90479285 0.83649218 0.73309457 0.77043486
 0.82473272 0.83428055 0.84916931 0.79046881 0.90408128 0.81153786
 0.81941742]
>> <class 'numpy.ndarray'>
>> <class 'str'>
>> (13,)
>> (13,)
>> <class 'str'>
原因:
csv檔中,只要同一行中,有非數值的字串出現,整行的型態都會轉為string
解決:
  1. 轉移csv檔中非數值的值
  2. 讀進來改型態(y.astype(np.float64))

留言

這個網誌中的熱門文章

COCO Dataset: 介紹、下載、取得方式、標註資料格式(key points)