如何使用iloc方法删除行

8

我使用以下代码中的iloc方法轻松删除了前两个

eng_df.drop(eng_df.iloc[:,:2] , axis=1, inplace=True)

但是我尝试使用以下代码的iloc方法删除第一个,但它没有起作用:

eng_df.drop(eng_df.iloc[:1 , :] ,  inplace=True)

...并出现以下警告:

KeyError:“['Country' 'Energy Supply' 'Energy Supply per Capita' '% Renewable']未在轴中找到”

我知道可以以不同的方式删除行,但我的问题是:我是否可以使用iloc方法删除行?如果可以,我该如何做,并且我的代码有什么问题?谢谢...


2
为什么使用.iloc想要删除代码?.iloc主要用于提取特定的行和列。如果您想使用索引进行删除,请尝试以下操作:df.drop(df.index[0]) - Shadab Hussain
第一个片段能够正常工作而第二个不能的原因是,数据框被解释为列名的可迭代对象。换句话说,[c for c in df] 大致相当于 df.columns。如果你用 eng_df.iloc[:,:2] 替换 df,情况也是一样的。 - paperskilltrees
4个回答

5
根据 pandas.DataFrame.drop 的文档,可以通过指定标签名称和相应的轴来删除行或列,也可以通过直接指定索引或列名进行删除。在使用多级索引时,可以通过指定级别删除不同级别上的标签。因此,针对您的代码,
# dropping columns
eng_df.drop(columns=eng_df.iloc[:,:2].columns.tolist(), inplace=True)

# dropping index
eng_df.drop(index=eng_df.iloc[:1, :].index.tolist(), inplace=True)

1
你不需要使用 tolist,对吗? - Mad Physicist

2
这对我来说非常有效,只需删除一行:

这适用于我只需要删除一行的情况:

dfcombo.drop(dfcombo.iloc[4].name)

使用iloc将行获取为Series,然后将行的索引作为Series的“name”属性。然后使用该索引进行删除。
对于您的示例,我猜应该是这样的:
eng_df.drop(eng_df.iloc[0].name,  inplace=True)

2
尝试添加 .indexdf_train_corr.drop(df_train_corr.iloc[1::2].index, inplace=True)。这段代码会删除所有奇数行。

1
使用 pandas 版本 0.22.0,我相信这将起作用。
#to drop iloc 104
eng_df.drop(labels=104, inplace=True)

1
我认为这仅适用于整数索引,并将104解释为标签而不是位置。 - paperskilltrees

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接