如何在 pandas 中将带有空格的字符串转换为浮点数

5
当我导入一个Excel文件时,某列中的一些数字是浮点数,而另一些则不是。如何将所有数字转换为浮点数?3 000,00 中的空格会引起问题。
  df['column']:
             column
0          3 000,00
1            156.00
2                 0

我正在尝试:

df['column'] = df['column'].str.replace(' ','')

但是它不起作用。我想在.astype(float)之后进行操作,但无法到达那里。有什么解决办法吗?1已经是一个浮点数,但0是一个字符串。


我认为这个链接会有所帮助:https://dev59.com/WWUo5IYBdhLWcg3woAqu - Newskooler
“但它没有起作用”,什么没有起作用? - mckuok
我已经尝试使用to_numeric(),但是:无法解析字符串“3 000,00”的位置为0,我也不能用replace删除空格。列的值不会改变,仍然是3 000,00。 - OhMikeGod
2个回答

5

首先将所有内容转换为字符串:

df['column'] = [float(str(val).replace(' ','').replace(',','.')) for val in df['column'].values]

例子:

>>> df = pd.DataFrame({'column':['3 000,00', 156.00, 0]})
>>> df['column2'] = [float(str(val).replace(' ','').replace(',','.')) for val in df['column'].values]
>>> df
     column  column2
0  3 000,00   3000.0
1       156    156.0
2         0      0.0

你的例子可以运行,但是当我使用我的数据时,出现了“无法将字符串转换为浮点数:'3\xa0000'”的错误。也许我的导入有问题:df = pd.read_excel('test.xlsx')。 - OhMikeGod
是的,这听起来像是你有一个奇怪的字符或意外的换行。 - Yuca
1
看起来Excel或者你的源代码在数据中加入了一些奇怪的字符。在转换为浮点数之前,也要将这些字符删除:.replace(u'\xa0', '') - Tim
我唯一感到奇怪的是,我也有-9 000,00的值,但在上面的示例中它可以正常工作。我不确定问题出在哪里... - OhMikeGod

1
import re    
df['column'] = df['column'].apply(lambda x: re.sub("[^0-9.]", "", str(x).replace(',','.'))).astype(float)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接