使用正则表达式将值替换为 np.nan

2023-12-23

我有一个数据框如下:

data1 = {"first":["alice", "bob", "carol"],
         "last_huge":["foo", "bar", "baz"]}
df = pd.DataFrame(data1)

例如,我想将所有字符“o”替换为“a”:

那我就做

df.replace({"o":"a"},regex=True)
Out[668]: 
   first last
0  alice  faa
1    bab  bar
2  caral  baz

它回馈我所需要的。

However,当我想将 'o' 替换为np.nan, 它将把整个字符串更改为np.nan. pandas的文档有什么解释吗?我可以通过以下方式找到一些信息源代码 https://github.com/pandas-dev/pandas/blob/v0.20.3/pandas/core/generic.py#L3678-L3926 .

更多信息:(它将整个字符串更改为np.nan)

df.replace({"o":np.nan},regex=True)
Out[669]: 
   first last
0  alice  NaN
1    NaN  bar
2    NaN  baz

NaN 始终用作缺失的占位符 https://stackoverflow.com/a/17534682/1240268,当用“missing”替换字符串的一部分时,它只能意味着整个条目被破坏。我听说过这称为 NaN 污染(或类似的,看看我是否能找到一些参考资料),因为如果 NaN 接触到数据就会受到损害。

也就是说,情况并非总是如此:

In [11]: s = pd.Series([1, 2, np.nan, 4])

In [12]: s.sum()
Out[12]: 7.0

In [13]: s.sum(skipna=False)
Out[13]: nan

在某些语言中,您会看到skipna = False作为默认行为,有些人强烈认为NaN应该always污染所有数据。 Pandas 采取了更务实的方法......

真正的问题是你期望它在 NaN 的情况下做什么?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用正则表达式将值替换为 np.nan 的相关文章

随机推荐