为什么我不能使用"pd"替换省略号。DataFrame.replace'?



我有以下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和@phœnix提到的更奇怪的事情是:

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

在我看来,这是一个bug,所以报告的bug:我不能在DataFrame中替换省略号。替换为标量#50373

你可以这样做:

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

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

最新更新