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

时间:2017-10-26 01:56:16

标签: python pandas

我有一个数据框如下:

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

它回馈我需要的东西。

但是,当我想将“o”替换为np.nan时,它会将整个字符串更改为np.nan pandas的文件有没有解释? 我可以通过source code找到一些信息。

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

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

2 个答案:

答案 0 :(得分:3)

NaN is consistently used as a placeholder for missing,用"缺少"替换部分字符串时它只能意味着整个条目受到损害。我已经听说过这种称为NaN污染(或类似的,会看到我能否找到一些参考资料),因为如果NaN触及数据会受到损害。

那就是说,并非总是如此:

*ngIf

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

真正的问题是,对于NaN,你期望它做什么?

答案 1 :(得分:1)

在python中有cmath.nanmath.nan

  

CPython实现细节:math模块主要包含围绕平台C数学库函数的瘦包装器。特殊情况下的行为在适当情况下遵循C99标准的附录F.当前实现将引发无效操作的ValueError,如sqrt(-1.0)或log(0.0)(其中C99附件F建议发出无效操作信号或被零除),以及溢出结果的溢出错误(例如,exp(1000.0) ))。除非有NaN,否则不会从上述任何函数返回NaN   或者更多的输入参数是NaN;在这种情况下,大多数功能   将返回一个NaN,但(再次遵循C99附件F)有一些   此规则的例外情况,例如pow(float('nan'),0.0)或   hypot(float('nan'),float('inf'))。

简而言之,当您的输入参数为NaN时,它将返回NaN

And also:

  

请注意,Python不会努力区分信令NaN   安静的NaNs和信号NaNs的行为仍未明确。   典型的行为是将所有NaN视为安静。