将字符串转换为 DataFrame 中的浮动

如何将包含字符串和 NaN值的 DataFrame 列转换为 float。还有另一列,它的值是字符串和浮点数; 如何将整个列转换为浮点数。

386936 次浏览

你可以试试 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])

注意: 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['MyColumnName'] = df['MyColumnName'].astype('float64')

在一个新版本的熊猫(0.17以上)中,你可以使用 到 _ 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')

这里有一个例子

                            GHI             Temp  Power Day_Type
2016-03-15 06:00:00 -7.99999952505459e-7    18.3    0   NaN
2016-03-15 06:01:00 -7.99999952505459e-7    18.2    0   NaN
2016-03-15 06:02:00 -7.99999952505459e-7    18.3    0   NaN
2016-03-15 06:03:00 -7.99999952505459e-7    18.3    0   NaN
2016-03-15 06:04:00 -7.99999952505459e-7    18.3    0   NaN

但如果这些都是字符串值,就像我的情况一样。 将所需的列转换为浮动:

df_inv_29['GHI'] = df_inv_29.GHI.astype(float)
df_inv_29['Temp'] = df_inv_29.Temp.astype(float)
df_inv_29['Power'] = df_inv_29.Power.astype(float)

您的数据框架现在将具有浮点值: -)

在转换为 float 之前,必须将空字符串(”)替换为 np.nan:

df['a']=df.a.replace('',np.nan).astype(float)