我有一个数据框架df:

>>> df
                  sales  discount  net_sales    cogs
STK_ID RPT_Date                                     
600141 20060331   2.709       NaN      2.709   2.245
       20060630   6.590       NaN      6.590   5.291
       20060930  10.103       NaN     10.103   7.981
       20061231  15.915       NaN     15.915  12.686
       20070331   3.196       NaN      3.196   2.710
       20070630   7.907       NaN      7.907   6.459

然后我想删除具有特定序列号的行,这些序列号在列表中表示,假设这里是[1,2,4],然后左:

                  sales  discount  net_sales    cogs
STK_ID RPT_Date                                     
600141 20060331   2.709       NaN      2.709   2.245
       20061231  15.915       NaN     15.915  12.686
       20070630   7.907       NaN      7.907   6.459

什么函数可以做到这一点?


当前回答

只使用Index参数删除行:-

df.drop(index = 2, inplace = True)

多行:-

df.drop(index=[1,3], inplace = True)

其他回答

要删除索引为1,2,4的行,您可以使用:

df[~df.index.isin([1, 2, 4])]

波浪符~对方法isin的结果求反。另一种选择是删除索引:

df.loc[df.index.drop([1, 2, 4])]

这对我很有效

# Create a list containing the index numbers you want to remove
index_list = list(range(42766, 42798))
df.drop(df.index[index_list], inplace =True)
df.shape

这将删除所创建范围内的所有索引

我用了一个更简单的方法——只用了两步。

用不需要的行/数据创建一个数据框架。 使用这个不需要的数据帧的索引来删除原始数据帧中的行。

例子: 假设你有一个数据框架df,它有很多列,包括'Age',它是一个整数。现在让我们假设你想删除所有以'Age'为负数的行。

df_age_negative = df[ df['Age'] < 0 ] # Step 1
df = df.drop(df_age_negative.index, axis=0) # Step 2

希望这是更简单的,并帮助你。

在对@theodros-zelleke的回答的评论中,@j-jones询问如果索引不是唯一的该怎么办。我不得不处理这种情况。我所做的就是在调用drop()之前重命名索引中的重复项,就像这样:

dropped_indexes = <determine-indexes-to-drop>
df.index = rename_duplicates(df.index)
df.drop(df.index[dropped_indexes], inplace=True)

其中rename_duplicate()是我定义的函数,它遍历index的元素并重命名重复项。我使用了与pd.read_csv()在列上使用的相同的重命名模式,即“%s。%d" % (name, count),其中name是行名,count是它之前出现的次数。

请注意,当您想要执行下拉行时,使用“inplace”命令可能很重要。

df.drop(df.index[[1,3]], inplace=True)

因为您最初的问题没有返回任何东西,所以应该使用这个命令。 http://pandas.pydata.org/pandas-docs/version/0.17.0/generated/pandas.DataFrame.drop.html