pandas没有将类型字符串转换为float

时间:2018-04-19 12:33:16

标签: python pandas dataframe

我尝试用空白字段替换','。

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文件!只有文件的路径。

3 个答案:

答案 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_numericpd.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.']]