python 为什么我不能用“pd.DataFrame.replace”替换省略号?

ma8fv8wu  于 2022-12-21  发布在  Python
关注(0)|答案(2)|浏览(152)

我有下面的pd.DataFrame

>>> df = pd.DataFrame({'a': [1, 2, 3, 4], 'b': ['a', 'b', 'c', 'd'], 'c': [1.2, 3.4, 5.6, 7.8], 'd': [..., ..., ..., ...]})
>>> df
   a  b    c         d
0  1  a  1.2  Ellipsis
1  2  b  3.4  Ellipsis
2  3  c  5.6  Ellipsis
3  4  d  7.8  Ellipsis
>>>

我正在尝试将省略号替换为1
我知道我可以这样做:

>>> df.mask(df == Ellipsis, 1)
   a  b    c  d
0  1  a  1.2  1
1  2  b  3.4  1
2  3  c  5.6  1
3  4  d  7.8  1
>>>

但是,出于某种原因。如果我这样做:

df.replace(..., 1)

或者:

df.replace(Ellipsis, 1)

出现以下错误:

TypeError: Expecting 'to_replace' to be either a scalar, array-like, dict or None, got invalid type 'ellipsis'

为什么replace不允许我替换Ellipsis
我知道怎么补救,我想知道为什么会这样。
奇怪的是,我可以用省略号替换数字,但反之则不行。
示例:

>>> df.replace(1, ...)
          a  b    c         d
0  Ellipsis  a  1.2  Ellipsis
1         2  b  3.4  Ellipsis
2         3  c  5.6  Ellipsis
3         4  d  7.8  Ellipsis
>>>

@jezrael和@phnix在这里提到的更奇怪的事情是:

df.replace({Ellipsis: 1})

还有:

df.replace({...: 1})

以及:

df.replace([Ellipsis], 1)

以及:

df.replace([...], 1)

工作如预期!
它给出:

a  b    c  d
0  1  a  1.2  1
1  2  b  3.4  1
2  3  c  5.6  1
3  4  d  7.8  1
cbeh67ev

cbeh67ev2#

您可以使用以下命令:

df['d']=df['d'].replace(to_replace=[...],value=(1))

df=df.replace(to_replace=[...],value=(1))

相关问题