将数据框中的非数字转换为 NaN(numpy)?

4

如何将DataFrame中的非数字转换为NaN (numpy)?例如,这是一个DataFrame

a    b
--------
10   ...
4    5
...  6

如何将其转换为:
a    b
--------
10   NaN
4    5
NaN  6

1
应标记为重复到https://dev59.com/bmMl5IYBdhLWcg3wZWSD。 - pansen
2个回答

10

如果我理解正确,你只需做

df = df.apply(lambda x: pd.to_numeric(x, errors='coerce') )

这将强制把错误的值转换为 NaN,请注意,NaN 的存在会将数据类型更改为 float,因为 int 无法表示 NaN.

In [6]:
df = df.apply(pd.to_numeric, errors='coerce')
df

Out[6]:
      a    b
0  10.0  NaN
1   4.0  5.0
2   NaN  6.0

lambda 不是必需的,但在我看来更易读


我喜欢 df = df.apply(pd.to_numeric, errors='coerce')apply 将传递 errors 参数。 - piRSquared
Lambda是否必要? - AsheKetchum
@piRSquared 当然,已经发布了。这是我的习惯。 - EdChum
1
@AsheKetchum 不,这不是必需的,但为了可读性,这是我的习惯。 - EdChum
@EdChum 那是真的 :) - AsheKetchum
@AsheKetchum,lambda只是语法。如果apply没有将参数传递给被传递的函数,那么您将需要它。我同意EdChum的观点...使用lambda可以更明显地表达正在发生的事情。 - piRSquared

4
您可以对数据框进行 stack 操作,然后再进行 unstack 操作。
pd.to_numeric(df.stack(), errors='coerce').unstack()

      a    b
0  10.0  NaN
1   4.0  5.0
2   NaN  6.0

什么是优点? - 00__00__00

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接