熊猫:drop_duplicates()。fillna没有填充零
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了熊猫:drop_duplicates()。fillna没有填充零相关的知识,希望对你有一定的参考价值。
我试图从一个系列中删除重复,然后用0填充NaNs。应该非常简单,但是当我将两个函数链接在一起时,我仍然得到NaN
,我期望0.0
。
df = pd.DataFrame({'a':[1,1,2,3,3,4], 'b':[10,20,30,40,50,60]})
df['a'] = df['a'].drop_duplicates().fillna(0)
收益率:
a b
0 1.0 10
1 NaN 20
2 2.0 30
3 3.0 40
4 NaN 50
5 4.0 60
鉴于:
df['a'] = df['a'].drop_duplicates()
df['a'] = df['a'].fillna(0)
工作正常,但似乎不必要地冗长。
我在大熊猫0.20.3。
答案
在drop_duplicates
删除一些值并对齐创建NaN
s值后出现问题。所以reindex
在这里帮助:
df['a'] = df['a'].drop_duplicates().reindex(df.index, fill_value=0)
print (df)
a b
0 1 10
1 0 20
2 2 30
3 3 40
4 0 50
5 4 60
或者使用duplicated
和loc
:
df.loc[df['a'].duplicated(), 'a'] = 0
print (df)
a b
0 1 10
1 0 20
2 2 30
3 3 40
4 0 50
5 4 60
另一答案
因为drop_duplicates
删除了元素,所以结果的大小比您指定的数据帧小。这会导致索引不匹配。
或者,使用mask
/ where
与duplicated
-
df['a'] = df['a'].mask(df['a'].duplicated(), 0)
要么,
df['a'] = df['a'].where(~df['a'].duplicated(), 0)
df
a b
0 1 10
1 0 20
2 2 30
3 3 40
4 0 50
5 4 60
以上是关于熊猫:drop_duplicates()。fillna没有填充零的主要内容,如果未能解决你的问题,请参考以下文章
pandas.DataFrame.drop_duplicates