我有一个数据帧,其中存储的不是预期的数值 “Object”类型的数据看起来像3014.0,即“3\xa0014.0”,而不是3014.0-空白(即“\xa0”)-会产生转换问题
问题:有没有办法把它转换成数字?你知道吗
奇怪的是:看起来我可以对单个元素进行转换:
float( df.iloc[0,0].replace('\xa0', '') ) # - works
但这并不适用于整个系列
df['p1'].astype('str').replace('\xa0','') # does nothing
--什么也不做
我试过了:
df['p1'].astype('str').replace('\xa0','') 什么也不做
数据示例:
你知道吗测向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
你知道吗测向iloc[0:3,0]:
'3\xa0014.0'
改用这个:
df['p1'] = df['p1'].apply(lambda x: float(x.replace('\xa0','')))
df.iloc[0,0]
是一个字符串,df['p1']
是一个系列。与字符串和with a series关联的replace
方法是不同的。当您对一个系列调用replace时,pandas将尝试替换元素。你知道吗例如
df = pd.DataFrame({'name': 'alexander'})` df['name'].replace('a', 'x') #does nothing` df['name'].replace('alexander', 'x') #replaces the name alexander with x
df['p1'].apply(lambda x: float(x.replace('\xa0','')))
将replace方法应用于p1列中的每个元素(恰好是字符串)。您可以阅读有关方法here的更多信息。你知道吗希望这能让事情更清楚:)
相关问题 更多 >
编程相关推荐