Python 将DataFrame中的值替换为None

Python 将DataFrame中的值替换为None,python,pandas,pandas-1.0,Python,Pandas,Pandas 1.0,使用None值创建数据帧时,它们将转换为NaN: > df = pd.DataFrame({'a': [0, None, 2]}) > df a 0 0.0 1 NaN 2 2.0 如果按索引将值设置为None > df = pd.DataFrame({'a': [0, 1, 2]}) > df["a"].iloc[1] = None > df a 0 0.0 1 NaN 2 2.0 然而,如果我做了替换,奇怪

使用
None
值创建数据帧时,它们将转换为
NaN

> df = pd.DataFrame({'a': [0, None, 2]})
> df

      a
0   0.0
1   NaN
2   2.0
如果按索引将值设置为
None

> df = pd.DataFrame({'a': [0, 1, 2]})
> df["a"].iloc[1] = None
> df

      a
0   0.0
1   NaN
2   2.0
然而,如果我做了替换,奇怪的事情开始发生:

> df = pd.DataFrame({'a': [0, 1, 2, 3]})
> df["a"].replace(1, "foo")

    a
0   0
1   'foo'
2   2
3   3

> df["a"].replace(2, None)

    a
0   0
1   1
2   1
3   3

这是怎么回事?

根据文档字符串

When ``value=None`` and `to_replace` is a scalar, list or
tuple, `replace` uses the method parameter (default 'pad') to do the
replacement. So this is why the 'a' values are being replaced by 10
in rows 1 and 2 and 'b' in row 4 in this case.
The command ``s.replace('a', None)`` is actually equivalent to
``s.replace(to_replace='a', value=None, method='pad')``
如果要实际替换为
None
,请传递一条命令:

>>> s = pd.Series([10, 'a', 'a', 'b', 'a'])

When one uses a dict as the `to_replace` value, it is like the
value(s) in the dict are equal to the `value` parameter.
``s.replace({'a': None})`` is equivalent to
``s.replace(to_replace={'a': None}, value=None, method=None)``:

>>> s.replace({'a': None})
0      10
1    None
2    None
3       b
4    None
dtype: object
当value=None且to_replace是标量、列表或元组时,replace使用方法参数(默认“pad”)进行替换。这就是为什么在本例中,第1行和第2行中的“a”值被10替换,第4行中的“b”值被替换的原因。命令s.replace('a',None)实际上相当于s.replace(to_replace='a',value=None,method='pad'):

df[“a”].替换({1:None})
s = pd.Series([10, 'a', 'a', 'b', 'a'])
s.replace({'a': None})
0      10
1    None
2    None
3       b
4    None
dtype: object

s.replace({'a': None}) is equivalent to s.replace(to_replace={'a': None}, value=None, method=None):
  s.replace('a', None)
    0    10
    1    10
    2    10
    3     b
    4     b
    dtype: object