我有一个数据框,其中存储的不是预期的数值 “Object”类型的数据看起来像 3 014.0,即“3\xa0014.0”,而不是 3014.0 - 空格(即“\xa0”) - 造成转换问题
问题:有什么方法可以将其转换为数字吗?
奇怪的事情:看来我可以对单个元素进行转换:
float( df.iloc[0,0].replace('\xa0', '') ) # - works
但这不适用于整个系列
df['p1'].astype('str').replace('\xa0','') # does nothing
-- 不执行任何操作
我尝试过:
- pd.to_numeric - 给出:无法解析字符串
- 尝试转换为字符串,然后使用替换:
df['p1'].astype('str').replace('\xa0','') 什么也不做
数据示例:
df.iloc[0:3,0]
2017-10-10 11:32:49.895023 3 014.0
2017-10-10 11:33:11.612169 3 013.5
2017-10-10 11:33:22.488124 3 013.0
Name: p1, dtype: object
df.iloc[0:3,0]:
'3\xa0014.0'
最佳答案
改用这个:df['p1'] = df['p1'].apply(lambda x: float(x.replace('\xa0','')))
df.iloc[0,0]
是一个字符串,而 df['p1']
是一个 pandas 系列。与字符串和 with a series 关联的 replace
方法是不同的。当您对一个系列调用替换时,pandas 将尝试替换元素。
例如,
df = pd.DataFrame({'name': 'alexander'})`
df['name'].replace('a', 'x') #什么也不做`
df['name'].replace('alexander', 'x') #用 x 替换名字 alexander
df['p1'].apply(lambda x: float(x.replace('\xa0','')))
将替换方法应用于每个元素(恰好是一个字符串)位于 p1 列中。您可以阅读有关该方法的更多信息 here .
希望这能让事情变得更清楚:)
关于python - 将带有空格的数据帧转换为数字、障碍物 - 空格(例如 3 014.0 即 '3\xa0014.0' ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46663994/