我认为这应该很简单,但我尝试了一些想法,但没有一个奏效:
last_row = len(DF)
DF = DF.drop(DF.index[last_row]) #<-- fail!
我试过使用负号,但这也会导致错误。我肯定还是误解了一些基本的东西。
我认为这应该很简单,但我尝试了一些想法,但没有一个奏效:
last_row = len(DF)
DF = DF.drop(DF.index[last_row]) #<-- fail!
我试过使用负号,但这也会导致错误。我肯定还是误解了一些基本的东西。
当前回答
令人惊讶的是居然没人提这个问题:
# To remove last n rows
df.head(-n)
# To remove first n rows
df.tail(-n)
在1000行的DataFrame上运行速度测试表明,切片和头部/尾部比使用drop快6倍:
>>> %timeit df[:-1]
125 µs ± 132 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
>>> %timeit df.head(-1)
129 µs ± 1.18 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
>>> %timeit df.drop(df.tail(1).index)
751 µs ± 20.4 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
其他回答
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
DF[:-n]
其中n是最后要删除的行数。
删除最后一行:
DF = DF[:-1]
对于具有多索引的更复杂的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。
我发现的最好的解决方案是不(不一定?)完全复制
df.drop(df.index[-1], inplace=True)
当然,你可以简单地省略inplace=True来创建一个新的数据框架,你也可以通过简单地截取df的切片轻松地删除最后N行。指数(df。index[-N:]删除最后N行)。因此,这种方法不仅简洁,而且非常灵活。
令人惊讶的是居然没人提这个问题:
# To remove last n rows
df.head(-n)
# To remove first n rows
df.tail(-n)
在1000行的DataFrame上运行速度测试表明,切片和头部/尾部比使用drop快6倍:
>>> %timeit df[:-1]
125 µs ± 132 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
>>> %timeit df.head(-1)
129 µs ± 1.18 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
>>> %timeit df.drop(df.tail(1).index)
751 µs ± 20.4 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)