如何将包含字符串和NaN
值的DataFrame列转换为浮点数.还有另一列,其值为字符串和浮点数; 如何将整个列转换为浮点数.
注意:
pd.convert_objects
现已弃用.您应该使用pd.Series.astype(float)
或pd.to_numeric
如其他答案中所述.
这是0.11.强制转换(或设置为nan)即使astype
失败也会起作用; 它也是系列的系列所以它不会转换说完整的字符串列
In [10]: df = DataFrame(dict(A = Series(['1.0','1']), B = Series(['1.0','foo']))) In [11]: df Out[11]: A B 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]: A B 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]: a b 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]: a b 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函数.它允许您转换整个数据框或仅转换单个列.它还使您能够选择如何处理无法转换为数值的内容:
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')
您必须先将np.nan替换为空字符串(''),然后再转换为float。即:
df['a']=df.a.replace('',np.nan).astype(float)