Python 在数据帧中删除行时的索引器错误
我有以下代码:Python 在数据帧中删除行时的索引器错误,python,pandas,Python,Pandas,我有以下代码: for (i1, row1), (i2, row2) in pairwise(df.iterrows()): if row1['months_to_maturity'] == row2['months_to_maturity'] and row1['coupon'] == row2['coupon']: df = df.drop(df.index[[i1]]) 如果满足以下条件,我将尝试删除行 row1['months_to_ma
for (i1, row1), (i2, row2) in pairwise(df.iterrows()):
if row1['months_to_maturity'] == row2['months_to_maturity'] and
row1['coupon'] == row2['coupon']:
df = df.drop(df.index[[i1]])
如果满足以下条件,我将尝试删除行
row1['months_to_maturity'] == row2['months_to_maturity'] and
row1['coupon'] == row2['coupon']
pairwise(df.iterrows())
方法给出数据帧的当前行和下一行
不幸的是,当我执行上面的代码时,我得到了这个错误
索引器:索引12超出大小为12的轴1的界限
我在本节开始时打印了
print(len(df.index))
并打印了12
,所以我有点不明白为什么索引器会提升。在我看来,您是在迭代行,匹配一个条件,然后根据满足的条件删除行。我不认为这是做你想做的事情的最佳方式
我将建议大家完全不同地做事。试试这个,给定数据帧df
df = pd.DataFrame({'a': [1,2,3,4,4,4,5,5,5]})
df['b'] = df.a
print (df)
a b
0 1 1
1 2 2
2 3 3
3 4 4
4 4 4
5 4 4
6 5 5
7 5 5
8 5 5
为了进入下一排,我可以
df_next = df.shift()
print (df_next)
a b
0 NaN NaN
1 1 1
2 2 2
3 3 3
4 4 4
5 4 4
6 4 4
7 5 5
8 5 5
df2 = df.drop(df.index[(df.b==df_nxt.b) & (df.a==df_nxt.a)])
a b
0 1 1
1 2 2
2 3 3
3 4 4
6 5 5
要找到匹配的行并删除它们,我可以
df_next = df.shift()
print (df_next)
a b
0 NaN NaN
1 1 1
2 2 2
3 3 3
4 4 4
5 4 4
6 4 4
7 5 5
8 5 5
df2 = df.drop(df.index[(df.b==df_nxt.b) & (df.a==df_nxt.a)])
a b
0 1 1
1 2 2
2 3 3
3 4 4
6 5 5
实际上,这归结为两行代码
df_next = df.shift()
df2 = df.drop(df.index[(df.b==df_nxt.b) & (df.a==df_nxt.a)])
这就是熊猫的魔力为什么不使用基于两列的drop_副本df.删除重复项(('months\u to\u duration','currency'),inplace=True)
重复行必须连续出现,还是要将重复项放在任何地方?@padraiccningham谢谢。我只是假设我不能将其用于特定的列。@Happyleapsec重复的行连续出现。@user131983,没问题,默认为所有列,但您可以传递一个子集:列标签或标签序列,