pandas.DataFrame将所有的字符串值设置为nan[英] pandas.DataFrame set all string values to nan

本文是小编为大家收集整理的关于pandas.DataFrame将所有的字符串值设置为nan的处理方法,想解了pandas.DataFrame将所有的字符串值设置为nan的问题怎么解决?pandas.DataFrame将所有的字符串值设置为nan问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我有一个pandas.DataFrame包含字符串,float和int类型.

是否有一种方法可以将所有无法转换为float转换为NaN的字符串?

例如:

    A  B   C      D
0   1  2   5      7
1   0  4 NaN     15
2   4  8   9     10
3  11  5   8      0
4  11  5   8  "wajdi"

to:

    A  B   C      D
0   1  2   5      7
1   0  4 NaN     15
2   4  8   9     10
3  11  5   8      0
4  11  5   8    NaN

推荐答案

您可以使用pd.to_numeric并设置errors='coerce'

df['D'] = pd.to_numeric(df.D, errors='coerce')

将为您提供:

    A   B   C   D
0   1   2   5.0 7.0
1   0   4   NaN 15.0
2   4   8   9.0 10.0
3   11  5   8.0 0.0
4   11  5   8.0 NaN

弃用的解决方案(pandas <= 0.20):

df.convert_objects(convert_numeric=True)

/p>

这是convert_objects源代码:# TODO: Remove in 0.18 or 2017, which ever is sooner中的开发注释.因此,如果您使用它,请不要将其作为长期解决方案.

其他推荐答案

您可以使用 带有errors='coerce'.

In [30]: df = pd.DataFrame({'a': [1, 2, 'NaN', 'bob', 3.2]})

In [31]: pd.to_numeric(df.a, errors='coerce')
Out[31]: 
0    1.0
1    2.0
2    NaN
3    NaN
4    3.2
Name: a, dtype: float64

这是将其应用于所有列的一种方法:

for c in df.columns:
    df[c] = pd.to_numeric(df[c], errors='coerce')

(请参阅Ninjapuppy的评论以更好的方式.)

其他推荐答案

这是一种方法:

df['E'] = pd.to_numeric(df.D, errors='coerce')

然后您有:

    A  B    C      D     E
0   1  2  5.0      7   7.0
1   0  4  NaN     15  15.0
2   4  8  9.0     10  10.0
3  11  5  8.0      0   0.0
4  11  5  8.0  wajdi   NaN

本文地址:https://www.itbaoku.cn/post/1728213.html