我认为这应该很简单,但我尝试了一些想法,但没有一个奏效:

last_row = len(DF)
DF = DF.drop(DF.index[last_row])  #<-- fail!

我试过使用负号,但这也会导致错误。我肯定还是误解了一些基本的东西。


当前回答

Drop返回一个新数组,这就是为什么它在og post中阻塞的原因;我有一个类似的要求,重命名一些列标题,并删除了一些行,因为一个格式不正确的csv文件转换为Dataframe,所以在阅读这篇文章后,我使用:

newList = pd.DataFrame(newList)
newList.columns = ['Area', 'Price']
print(newList)
# newList = newList.drop(0)
# newList = newList.drop(len(newList))
newList = newList[1:-1]
print(newList)

它工作得很好,正如你可以看到上面的两条注释掉的行,我尝试了drop.()方法,它工作,但不像使用[n:-n]那样酷和可读,希望能帮助到一些人,谢谢。

其他回答

使用索引

df.iloc[:-1,:]

这就是iloc存在的原因。你也可以用head或tail。

由于Python中的索引定位是基于0的,因此在索引中对应len(DF)的位置实际上不会有一个元素。你需要last_row = len(DF) - 1:

In [49]: dfrm
Out[49]: 
          A         B         C
0  0.120064  0.785538  0.465853
1  0.431655  0.436866  0.640136
2  0.445904  0.311565  0.934073
3  0.981609  0.695210  0.911697
4  0.008632  0.629269  0.226454
5  0.577577  0.467475  0.510031
6  0.580909  0.232846  0.271254
7  0.696596  0.362825  0.556433
8  0.738912  0.932779  0.029723
9  0.834706  0.002989  0.333436

[10 rows x 3 columns]

In [50]: dfrm.drop(dfrm.index[len(dfrm)-1])
Out[50]: 
          A         B         C
0  0.120064  0.785538  0.465853
1  0.431655  0.436866  0.640136
2  0.445904  0.311565  0.934073
3  0.981609  0.695210  0.911697
4  0.008632  0.629269  0.226454
5  0.577577  0.467475  0.510031
6  0.580909  0.232846  0.271254
7  0.696596  0.362825  0.556433
8  0.738912  0.932779  0.029723

[9 rows x 3 columns]

然而,只写DF[:-1]要简单得多。

DF。drop((label =None, axis=0, index = last_row)

作为的函数:

DataFrame。drop(label =None, axis=0, index=None, columns=None, level=None, inplace=False, errors='raise')

从行或列中删除指定的标签。

https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.drop.html

对于具有多索引的更复杂的dataframe(例如“Stock”和“Date”),并且希望删除每个股票的最后一行,而不仅仅是最后一只股票的最后一行,那么解决方案如下:

# To remove last n rows
df = df.groupby(level='Stock').apply(lambda x: x.head(-1)).reset_index(0, drop=True)

# To remove first n rows
df = df.groupby(level='Stock').apply(lambda x: x.tail(-1)).reset_index(0, drop=True)

由于groupby()向Multi-Index添加了一个额外的级别,我们只需使用reset_index()将其放在末尾。结果df与操作前保持相同类型的Multi-Index。

删除最后n行:

df.drop(df.tail(n).index,inplace=True) # drop last n rows

通过同样的方式,可以删除前n行:

df.drop(df.head(n).index,inplace=True) # drop first n rows