我有一个数据框如下:
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
答案 0 :(得分:3)
NaN is consistently used as a placeholder for missing,用"缺少"替换部分字符串时它只能意味着整个条目受到损害。我已经听说过这种称为NaN污染(或类似的,会看到我能否找到一些参考资料),因为如果NaN触及数据会受到损害。
那就是说,并非总是如此:
*ngIf
在某些语言中,您会看到skipna = False作为默认行为,有些人强烈认为NaN应该总是污染所有数据。熊猫采取了一种更务实的方法......
真正的问题是,对于NaN,你期望它做什么?
答案 1 :(得分:1)
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
请注意,Python不会努力区分信令NaN 安静的NaNs和信号NaNs的行为仍未明确。 典型的行为是将所有NaN视为安静。