Pandas如何转换所有字符串值

2024-04-24 01:26:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我想把Pandas DataFrame中的所有string值转换成float,我可以定义一个短函数来完成这项工作,但这不是一种Pythonic方法。我的数据帧如下所示:

>>> df = pd.DataFrame(np.array([['1', '2', '3'], ['4', '5', '6']]))
>>> df
   0  1  2
0  1  2  3
1  4  5  6
>>> df.dtypes
0    object
1    object
2    object
dtype: object
>>> type(df[0][0])
<type 'str'>

我只是想知道是否有一些内置函数Pandas DataFrame将所有string值转换为float。如果你知道熊猫文档的内置功能,请发布链接。


Tags: 数据方法函数dataframepandasdfstring定义
2条回答

假设所有值都可以正确转换为float,则可以使用^{}函数将完整数据帧的类型转换为float。示例-

df = df.astype(float)

演示-

In [5]: df = pd.DataFrame(np.array([['1', '2', '3'], ['4', '5', '6']]))

In [6]: df.astype(float)
Out[6]:
   0  1  2
0  1  2  3
1  4  5  6

In [7]: df = df.astype(float)

In [8]: df.dtypes
Out[8]:
0    float64
1    float64
2    float64
dtype: object

.astype()函数还有一个raise_on_error参数(默认为True),您可以将其设置为False,使其忽略错误。在这种情况下,原始值用于数据帧-

In [10]: df = pd.DataFrame([['1', '2', '3'], ['4', '5', '6'],['blah','bloh','bleh']])

In [11]: df.astype(float,raise_on_error=False)
Out[11]:
      0     1     2
0     1     2     3
1     4     5     6
2  blah  bloh  bleh

要仅将序列/列转换为浮点数,同样假设所有值都可以转换,可以使用[Series.astype()][2]。示例-

df['somecol'] = df['somecol'].astype(<type>)

另一种选择是使用^{}。它试图 将数字字符串转换为数字,不可转换的值将变为NaN:

import pandas as pd

df = pd.DataFrame([['1', '2', '3'], ['4', '5', 'foo'], ['bar', 'baz', 'quux']])
df = df.convert_objects(convert_numeric=True)
print(df)

收益率

    0   1   2
0   1   2   3
1   4   5 NaN
2 NaN NaN NaN

相反,df.astype(float)将引发ValueError: could not convert string to float: quux,因为在上述数据帧中,某些字符串(例如'quux')不是数字。

注意:在pandas的未来版本中(0.16.2之后),函数参数将是numeric=True,而不是convert_numeric=True

相关问题 更多 >