我有以下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))