Python 转换数据帧类型

Python 转换数据帧类型,python,numpy,pandas,Python,Numpy,Pandas,我通过mysql调用创建了一个dataFrame,它以对象类型返回数据 数据主要是数字,带有一些“na”值 如何强制转换数据帧的类型,以便正确地键入数值(浮动),并将“na”值表示为numpy NaN值?df=df。convert\u对象(convert\u numeric=True)在大多数情况下都有效 我应该注意,这复制了数据。最好在初始读取时将其转换为数字类型。如果您发布代码和一个小示例,可能有人可以帮助您。在数据帧上使用替换方法: import numpy as np df = Data

我通过mysql调用创建了一个dataFrame,它以对象类型返回数据

数据主要是数字,带有一些“na”值


如何强制转换数据帧的类型,以便正确地键入数值(浮动),并将“na”值表示为numpy NaN值?

df=df。convert\u对象(convert\u numeric=True)
在大多数情况下都有效


我应该注意,这复制了数据。最好在初始读取时将其转换为数字类型。如果您发布代码和一个小示例,可能有人可以帮助您。

在数据帧上使用替换方法:

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)本身不起作用是有帮助的。您必须将其分配回现有数据帧。

这是Tom建议的,是正确的

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

这似乎不起作用,例如,
s=pd.系列([1,'na',3,4]);s、 convert\u objects(convert\u numeric=True)
Hmm它适用于数据帧。我猜他们不是在用同样的启发法重铸?编辑:我猜你举的例子不起作用。我正在使用类似于
s=pd.DataFrame(['1','na','3','4'])的东西。
它适用于这一点。似乎不。。。e、 g.
df=pd.DataFrame(s)
:创建了一个错误,当有一个非字符串元素时,我认为这是一个错误。我刚刚在Github问题上发布了这个元素,但是Github坏了。你可以使用
inplace=True
创建的。。。我猜标准的说法是,在这一点之前它应该已经被转换了!