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

WeN*_*Ben 5 python pandas

我有一个如下数据框:

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

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

那我做

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

它还给我我需要的东西。

但是,当我要将'o'替换为时np.nan,它将整个字符串更改为np.nan熊猫的文件有什么解释吗?我可以通过源代码找到一些信息。

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

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

And*_*den 4

NaN 始终用作 Missing 的占位符,当用“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
Run Code Online (Sandbox Code Playgroud)

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

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