在 Pandas 中将 Excel 文件中的逗号转换为点。

3

我在Excel文件中有这种类型的列:

Numbers
   13.264.999,99
  1.028,10
756,4
  1.100,1

所以,当我使用pd.read_excel加载时,一些数字,如756,4会被转换为756.4并变成浮点数,而上面示例中的其他3个保持不变,并且是字符串形式。

现在,我想要以这种形式(类型为浮点数)显示该列:

Numbers
13264999.99
1028.10
756.4
1100.1

然而,当使用以下代码将加载的Excel列进行转换时:

df["Numbers"]=df["Numbers"].str.replace('.','')
df["Numbers"]=df["Numbers"].str.replace(',','.')
df["Numbers"]=df["Numbers"].astype(float)

我得到:

Numbers
13264999.99
1028.10
nan
1100.1

该怎么办?


3
你尝试过根据 https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_excel.html 的建议添加参数 thousands='.' 吗? - Anton vBR
不,它对我的情况不起作用,正如您所看到的,在Excel文件中有一些空格,因此其他3个数字被加载为字符串,因此千位参数对它们不起作用。 - Alex T
也许你可以以某种方式分享你的Excel文件。 - Anton vBR
听起来很不可信,即使有空格,thousands分隔符也应该能够正常工作。 - Erfan
由于带有空格的值被导入为字符串,因此它不会将其作为值。 - Alex T
3个回答

3

好的,我成功解决了这个问题:

首先,我将每个值转换为字符串,然后将每个逗号替换为点。 然后我留下最后一个点,以便数字可以轻松转换为浮点数:

df["Numbers"]=df["Numbers"].astype(str).str.replace(",", ".")
df["Numbers"]=df["Numbers"].str.replace(r'\.(?=.*?\.)', '')  
df["Numbers"]=df["Numbers"].astype(float)

0
如 Anton vBR 在评论中所示,使用参数 thousands='.',您将正确读取数据。

只是猜测,但也许先解决空格问题,然后立即转换为浮点数会起作用? - Jopie

0

您可以尝试使用字符串作为默认类型来读取Excel文件。

df=pd.read_excel('file.xlsx',dtype=str)

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