无法将字符串转换为浮点数

Dat*_*vid 0 type-conversion pandas

熊猫版0.13

虚拟数据帧

d = {'one':['97628', '97628', '97628.271', '97628271'],  
     'two':['98800', '98800', '98800.000', '98800000']}

a = pd.DataFrame(d)  
a
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

a.dtypes
Run Code Online (Sandbox Code Playgroud)

一个对象
两个对象
dtype:object

到目前为止,一切看起来都很好.然后我尝试将字符串转换为浮点数.

a.loc[:,'one'] = a.loc[:,'one'].astype(float)  
a.loc[:,'two'] = a.loc[:,'two'].astype(float)  
Run Code Online (Sandbox Code Playgroud)

执行代码后没有任何变化.

a.dtypes
Run Code Online (Sandbox Code Playgroud)

一个对象
两个对象
dtype:object

最糟糕的是数据框中的数据已经改变

在此输入图像描述

这是一个错误还是我错误地更改了数据类型?

And*_*den 5

这里发生的是转换正确发生:

In [21]: a.loc[:,'one'].astype(float)
Out[21]: 
0       97628.000
1       97628.000
2       97628.271
3    97628271.000
Name: one, dtype: float64
Run Code Online (Sandbox Code Playgroud)

但它被分配到一个对象列(你看到的是格式只是数字格式 - 数字是正确的).

一个很好的方法是使用convert_objects:

In [11]: a.convert_objects(convert_numeric=True)
Out[11]: 
            one       two
0     97628.000     98800
1     97628.000     98800
2     97628.271     98800
3  97628271.000  98800000

[4 rows x 2 columns]

In [12]: a.convert_objects(convert_numeric=True).dtypes
Out[12]: 
one    float64
two    float64
dtype: object
Run Code Online (Sandbox Code Playgroud)