【问题标题】:how to regularize numeric/non-numeric entries in pandas dataframes如何规范熊猫数据框中的数字/非数字条目
【发布时间】:2021-05-25 21:38:32
【问题描述】:

我想控制我的 pandas 数据框中的非数字条目。 假设我有以下内容:

>>> df
   col_1  col_2  col_3
0   0.01    NaN    0.1
1    NaN    0.9    0.2
2   0.01    NaN    0.3
3   0.01    0.9    0.4

我可以采用如下的行均值,而 python 会正确跳过 NaN 值:

>>> df.mean(axis=1)
0    0.055000
1    0.550000
2    0.155000
3    0.436667
dtype: float64

太棒了!但现在假设我导入的表中的一个值是一个字符串

>>> df.iloc[0,1]="str1"
>>> df
   col_1 col_2  col_3
0   0.01  str1    0.1
1    NaN   0.9    0.2
2   0.01   NaN    0.3
3   0.01   0.9    0.4
>>> df.mean(axis=1)
0    0.055
1    0.200
2    0.155
3    0.205
dtype: float64

危险: 输出看起来合理,但错误,因为一旦我将位置 [0,1] 中的值更改为字符串,位置 [1,1][3,1] 中的值就从数字0.9 成为字符串"0.9",并且所有字符串都从平均中省略(我猜每一列都必须是相同的类型?这可能是有原因的,但是男孩这是危险的微妙。)

我现在要做的是将数据框的所有条目强制恢复为数字类型。任何可以被合理地强制转换为数字的东西都应该变成那个数字,而任何东西都应该变成nan(不管它可能是什么字符串或类型)。

Pandas series 有一个函数 pandas.to_numeric,您可以在其中设置 errors='coerce',但不幸的是 df 的类似函数 (DataFrame.astype()) 不允许此选项。

是否有一个函数可以“使 dataFrame 中的每个元素看起来像一个数字,并让其他所有元素 nan”?

【问题讨论】:

    标签: pandas dataframe numeric coerce


    【解决方案1】:

    我认为您可以在具有apply 的列子集上使用to_numericThis answer 可能会有所帮助。

    【讨论】:

      【解决方案2】:

      您可以apply,默认情况下会在列上执行:

      df.apply(pd.to_numeric, errors='coerce').mean(1)
      

      【讨论】:

        猜你喜欢
        • 2021-04-11
        • 2017-05-04
        • 1970-01-01
        • 2019-05-14
        • 2018-08-20
        • 2020-10-21
        • 2014-12-12
        • 2019-06-29
        • 1970-01-01
        相关资源
        最近更新 更多