我有一个通过mysql调用创建的pandas dataFrame,它将数据作为对象类型返回。
数据主要是数字,有一些'na'值。
如何转换dataFrame的类型以使数值适当地键入(浮点数)并将'na'值表示为numpy NaN值?
答案 0 :(得分:1)
df = df.convert_objects(convert_numeric=True)
适用于大多数情况。
我应该注意,这会复制数据。最好在初始读取时将其设置为数字类型。如果您发布代码和一个小例子,有人可能会帮助您。
答案 1 :(得分:1)
对数据帧使用replace方法:
import numpy as np
df = DataFrame({
'k1': ['na'] * 3 + ['two'] * 4,
'k2': [1, 'na', 2, 'na', 3, 4, 4]})
print df
df = df.replace('na', np.nan)
print df
我认为指出df.replace('na',np.nan)本身不起作用是有帮助的。您必须将其分配回现有数据帧。
答案 2 :(得分:1)
这是汤姆建议的并且是正确的
In [134]: s = pd.Series(['1','2.','na'])
In [135]: s.convert_objects(convert_numeric=True)
Out[135]:
0 1
1 2
2 NaN
dtype: float64
正如Andy所指出的,这不起作用(我认为这是一个bug),所以先转换为所有字符串元素,然后转换
In [136]: s2 = pd.Series(['1','2.','na',5])
In [138]: s2.astype(str).convert_objects(convert_numeric=True)
Out[138]:
0 1
1 2
2 NaN
3 5
dtype: float64