我尝试用空白字段替换','。
df['amount'].replace(',','', regex=True).astype(float)
错误:
ValueError: could not convert string to float:
df['amount'] = df['amount'].astype('float64')
我仍然得到同样的错误。示例数据如下所示: 5,000.00 和 1,00,000.234 值。
如何将其转换为浮动?
顺便说一下,我正在读一个json文件!只有文件的路径。
答案 0 :(得分:1)
我认为需要转回:
df = pd.DataFrame({'amount':['5,000.00', '1,00,000.234']})
df['amount'] = df['amount'].replace(',','', regex=True).astype('float64')
print (df)
amount
0 5000.000
1 100000.234
如果不起作用,请检查是否存在一些错误值:
df = pd.DataFrame({'amount':['5,000.00', '1,00,000.234', 'a']})
print (df)
amount
0 5,000.00
1 1,00,000.234
2 a
print (df.loc[pd.to_numeric(df['amount'].replace(',','', regex=True), errors='coerce').isnull(), 'amount'])
2 a
Name: amount, dtype: object
然后可以将错误值转换为NaN
s:
df = pd.DataFrame({'amount':['5,000.00', '1,00,000.234', 'a']})
print (df)
amount
0 5,000.00
1 1,00,000.234
2 a
df['amount'] = pd.to_numeric(df['amount'].replace(',','', regex=True), errors='coerce', downcast='float')
print (df)
amount
0 5000.000
1 100000.234
2 NaN
如果pd.read_csv
使用DataFrame
添加参数thousands=','
:
df = pd.read_csv(file, thousands=',')
答案 1 :(得分:1)
将pandas.to_numeric
与pd.Series.str.replace
一起使用可以解决此问题:
s = pd.Series(['5,000.00', '1,00,000.234'])
s = pd.to_numeric(s.str.replace(',', ''), downcast='float')
print(s)
# 0 5000.000
# 1 100000.234
# dtype: float64
然而,如果可能的话,更好的想法是在源头修复此问题。例如,pandas.read_csv
具有允许您考虑此类数字格式的参数。
答案 2 :(得分:0)
像 5,000.00 这样的值将被转换为 5000.00 作为浮点数:
df['Withdrawal Amt.'] = [float(str(i).replace(",", "")) for i in df['Withdrawal Amt.']]