首页 > 解决方案 > 为什么 pandas 的 replace 方法不适用于 None 作为值?

问题描述

假设我们有一个 DataFrame:

import pandas as pd
df = pd.DataFrame({"a": [1,"NAN",3], "b": ["NAN",5,"NAN"], "c": ["NAN",8,9]})

     a    b    c
0    1  NAN  NAN
1  NAN    5    8
2    3  NAN    9

当我尝试执行常规时replace,我得到不正确的结果:

df = df.replace('NAN', None)

   a    b    c
0  1  NAN  NAN
1  1    5    8
2  3    5    9

但是,当我将值作为列表时,它按预期工作:

df = df.replace(['NAN'], [None])

    a    b    c
0  1.0  NaN  NaN
1  NaN  5.0  8.0
2  3.0  NaN  9.0

你能解释一下为什么这两种情况下的行为不同吗?

PS:熊猫版本是1.0.3。

标签: pythonpandas

解决方案


正如这里回答的那样:

df.replace("NAN", None)相当于df.replace("NAN", None, method='pad')如果您查看源代码。

两者兼得df.replace({"NAN": None})df.replace("NAN", np.nan)给你你想要的


推荐阅读