[英]pandas to_numeric/to_* raising buffer error if input is a dataframe slice
[英]How to solve Dataframe to_numeric Error (Python)?
我有 dataframe 包含浮點數。 我想以 sum mult 的形式進行數字運算。 ETC。 。 列類型是 object。所以我必須將此列更改為數字列。 我使用 to_numeric function 但它給了我 NaN 作為結果。
我怎么解決這個問題?
代碼:
#import libraries
import pandas as pd
data = pd.read_csv('file.csv', engine='python', delimiter=';')
#change object columns into a numeric columnn
for i in data.columns :
data[i] = pd.to_numeric(data[i], errors='coerce')
Dataframe
t0 (actual) t0 t0,lower t0,upper
0 11861,6318726842 0 0 0
1 4761,43316 5709,1728515625 3776,725188260803 7939,908970830105
2 36,22841951973635 0 0 0
3 583,3716479196096 0 0 0
4 25087,16436661841 26040,7890625 21825,20941707611 31905,394350044822
....
結果:
t0 (actual) t0 t0,lower t0,upper
0 NaN NaN NaN NaN
1 NaN NaN NaN NaN
2 NaN NaN NaN NaN
3 NaN NaN NaN NaN
4 NaN NaN NaN NaN
我無法重現您的錯誤,但我假設您可以將decimal=","
添加到pd.read_csv
。
從文檔:
十進制:str,默認'.'
識別為小數點的字符(例如,對歐洲數據使用',')。
所以你的代碼看起來像這樣:
#import libraries
import pandas as pd
data = pd.read_csv('file.csv', engine='python', delimiter=';', decimal=",")
#change object columns into a numeric columnn
for i in data.columns :
data[i] = pd.to_numeric(data[i], errors='coerce')
如果將errors
從coerce
更改為raise
,您將看到pandas
無法將這些值轉換為數字數據類型。 這是因為它無法將,
識別為小數點分隔符(默認情況下為.
)。 這意味着errors = 'coerce'
會將這些值替換為NaN
。
看起來,如果您嘗試在從.csv
文件中讀取這些值后立即轉換這些值,則您應該指定在read_csv
調用中使用的小數點分隔符。 然后您將不需要手動轉換這些值。
data = pd.read_csv('file.csv', engine='python', delimiter=';', decimal = ',')
但是,如果這些值來自您的腳本,則您需要將,
值替換為.
在您的字符串值中:
for i in data.columns :
data[i] = pd.to_numeric(data[i].str.replace(',','.'), errors='coerce')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.