0

我想控制我的熊猫数据框中的非数字条目。说我有以下内容:

>>> 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系列有一个pandas.to_numeric可以设置的功能errors='coerce',但不幸的是 df's ( DataFrame.astype()) 的类似功能不允许此选项。

是否有“使 dataFrame 的每个元素看起来像数字,并制作其他所有元素”的功能nan

4

2 回答 2

3

我认为您可以to_numeric使用apply. 这个答案可能会有所帮助。

于 2021-02-23T15:36:31.410 回答
2

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

df.apply(pd.to_numeric, errors='coerce').mean(1)
于 2021-02-23T15:36:55.190 回答