将string转换为浮动在DataFrame中

如何将包含string和NaN值的DataFrame列转换为浮点数。 还有另外一列的值是string和浮点数; 如何将整个列转换为浮动。

这在0.11中可用。 强制转换(或设置为nan)即使在astype会失败的情况下,这也是astype 。 它也串联所以它不会转换成一个完整的string列

 In [10]: df = DataFrame(dict(A = Series(['1.0','1']), B = Series(['1.0','foo']))) In [11]: df Out[11]: AB 0 1.0 1.0 1 1 foo In [12]: df.dtypes Out[12]: A object B object dtype: object In [13]: df.convert_objects(convert_numeric=True) Out[13]: AB 0 1 1 1 1 NaN In [14]: df.convert_objects(convert_numeric=True).dtypes Out[14]: A float64 B float64 dtype: object 

您可以尝试df.column_name = df.column_name.astype(float) 。 至于NaN值,你需要指定它们应该如何转换,但是你可以使用.fillna方法来完成。

例:

 In [12]: df Out[12]: ab 0 0.1 0.2 1 NaN 0.3 2 0.4 0.5 In [13]: df.a.values Out[13]: array(['0.1', nan, '0.4'], dtype=object) In [14]: df.a = df.a.astype(float).fillna(0.0) In [15]: df Out[15]: ab 0 0.1 0.2 1 0.0 0.3 2 0.4 0.5 In [16]: df.a.values Out[16]: array([ 0.1, 0. , 0.4]) 

在较新版本的pandas(0.17及以上)中,可以使用to_numeric函数。 它可以让你转换整个dataframe或只是个别的列。 它还使您能够select如何处理无法转换为数值的东西:

 import pandas as pd s = pd.Series(['1.0', '2', -3]) pd.to_numeric(s) s = pd.Series(['apple', '1.0', '2', -3]) pd.to_numeric(s, errors='ignore') pd.to_numeric(s, errors='coerce') 
 df['MyColumnName'] = df['MyColumnName'].astype('float64')