问题:如何删除熊猫数据框的最后一行数据
我认为这应该很简单,但是我尝试了一些想法,但都没有成功:
last_row = len(DF)
DF = DF.drop(DF.index[last_row]) #<-- fail!
我尝试使用负索引,但这也会导致错误。我仍然会误解一些基本知识。
回答 0
要删除最后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
回答 1
DF[:-n]
其中n是要删除的最后行数。
要删除最后一行:
DF = DF[:-1]
回答 2
由于Python中的索引定位是基于0的,因此index
与相对应的位置实际上没有元素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]
。
回答 3
没有人惊讶地提出这一点:
# To remove last n rows
df.head(-n)
# To remove first n rows
df.tail(-n)
对1000行的DataFrame进行速度测试表明,切片和head
/ tail
的速度比使用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)
回答 4
stats = pd.read_csv("C:\\py\\programs\\second pandas\\ex.csv")
统计输出:
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
只是使用 skipfooter=1
skipfooter:int,默认0
文件底部要跳过的行数
stats_2 = pd.read_csv("C:\\py\\programs\\second pandas\\ex.csv", skipfooter=1, engine='python')
stats_2的输出
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
回答 5
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]那样简单易懂,希望对您有所帮助,谢谢。
回答 6
对于具有多索引(例如“股票”和“日期”)且希望删除每个股票的最后一行而不只是最后一个股票的最后一行的更复杂的数据框,解决方案如下:
# 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类型。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。