【问题标题】:pandas.DataFrame set all string values to nanpandas.DataFrame 将所有字符串值设置为 nan
【发布时间】:2017-01-04 04:44:22
【问题描述】:

我有一个pandas.DataFrame,其中包含字符串、浮点数和整数类型。

有没有办法将所有不能转换为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"

到:

    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

【问题讨论】:

    标签: python string pandas dataframe


    【解决方案1】:

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

    pandas.to_numeric

    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

    df.convert_objects(convert_numeric=True)
    

    pandas.DataFrame.convert_objects

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

    【讨论】:

    • 不错的答案!
    【解决方案2】:

    这是一种方法:

    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
    

    【讨论】:

      【解决方案3】:

      您可以将pd.to_numericerrors='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.apply(lambda L: pd.to_numeric(L, errors='coerce'))...
      猜你喜欢
      • 2016-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-25
      • 2014-02-16
      • 1970-01-01
      • 2019-07-14
      • 1970-01-01
      相关资源
      最近更新 更多