Pandas刪除數據的幾種情況


開始之前,pandas中DataFrame刪除對象可能存在幾種情況
1、刪除具體列
2、刪除具體行
3、刪除包含某些數值的行或者列
4、刪除包含某些字符、文字的行或者列
本文就針對這四種情況探討一下如何操作。

數據准備

模擬了一份股票交割的記錄。

In [1]: import pandas as pd

In [2]: data = {
   ...:     '證券名稱' : ['格力電器','視覺中國','成都銀行','中國聯通','格力電器','視覺中國','成都銀行','中國聯通'],
   ...:     '摘要': ['證券買入','證券買入','證券買入','證券買入','證券賣出','證券賣出','證券賣出','證券賣出'],
   ...:     '成交數量' : [500,1000,1500,2000,500,500,1000,1500],
   ...:     '成交金額' : [-5000,-10000,-15000,-20000,5500,5500,11000,15000]
   ...: }
   ...: 

In [3]: df = pd.DataFrame(data, index = ['2018-2-1','2018-2-1','2018-2-1','2018-2-1','2018-2-2','2018-2-2','2018-2-2','2018-2-3'])

In [4]: df
Out[4]: 
          成交數量   成交金額    摘要  證券名稱
2018-2-1   500  -5000  證券買入  格力電器
2018-2-1  1000 -10000  證券買入  視覺中國
2018-2-1  1500 -15000  證券買入  成都銀行
2018-2-1  2000 -20000  證券買入  中國聯通
2018-2-2   500   5500  證券賣出  格力電器
2018-2-2   500   5500  證券賣出  視覺中國
2018-2-2  1000  11000  證券賣出  成都銀行
2018-2-3  1500  15000  證券賣出  中國聯通

刪除具體列

In [5]: df.drop('成交數量',axis=1)
Out[5]: 
           成交金額    摘要  證券名稱
2018-2-1  -5000  證券買入  格力電器
2018-2-1 -10000  證券買入  視覺中國
2018-2-1 -15000  證券買入  成都銀行
2018-2-1 -20000  證券買入  中國聯通
2018-2-2   5500  證券賣出  格力電器
2018-2-2   5500  證券賣出  視覺中國
2018-2-2  11000  證券賣出  成都銀行
2018-2-3  15000  證券賣出  中國聯通

刪除具體行

In [6]: df.drop('2018-2-3')
Out[6]: 
          成交數量   成交金額    摘要  證券名稱
2018-2-1   500  -5000  證券買入  格力電器
2018-2-1  1000 -10000  證券買入  視覺中國
2018-2-1  1500 -15000  證券買入  成都銀行
2018-2-1  2000 -20000  證券買入  中國聯通
2018-2-2   500   5500  證券賣出  格力電器
2018-2-2   500   5500  證券賣出  視覺中國
2018-2-2  1000  11000  證券賣出  成都銀行

也可以根據行號刪除記錄,比如刪除第三行

In [22]: df.drop(df.index[7])
Out[22]: 
          成交數量   成交金額    摘要  證券名稱
2018-2-1   500  -5000  證券買入  格力電器
2018-2-1  1000 -10000  證券買入  視覺中國
2018-2-1  1500 -15000  證券買入  成都銀行
2018-2-1  2000 -20000  證券買入  中國聯通
2018-2-2   500   5500  證券賣出  格力電器
2018-2-2   500   5500  證券賣出  視覺中國
2018-2-2  1000  11000  證券賣出  成都銀行

注意,這個辦法其實不是按照行號刪除,而是按照索引刪除。如果index為3,則會將前4條記錄都刪除。這個方法支持一個范圍,以及用負數表示從末尾刪除。

刪除特定數值的行(刪除成交金額小於10000)

In [7]: df[ df['成交金額'] > 10000]
Out[7]: 
          成交數量   成交金額    摘要  證券名稱
2018-2-2  1000  11000  證券賣出  成都銀行
2018-2-3  1500  15000  證券賣出  中國聯通

本例其實是篩選,如果需要保留,可以將篩選后的對象賦值給自己即可。

刪除某列包含特殊字符的行

In [11]: df[ ~ df['證券名稱'].str.contains('聯通') ]
Out[11]: 
          成交數量   成交金額    摘要  證券名稱
2018-2-1   500  -5000  證券買入  格力電器
2018-2-1  1000 -10000  證券買入  視覺中國
2018-2-1  1500 -15000  證券買入  成都銀行
2018-2-2   500   5500  證券賣出  格力電器
2018-2-2   500   5500  證券賣出  視覺中國
2018-2-2  1000  11000  證券賣出  成都銀行

如果想取包含某些字符的記錄,可以去掉~

In [12]: df[ df['證券名稱'].str.contains('聯通') ]
Out[12]: 
          成交數量   成交金額    摘要  證券名稱
2018-2-1  2000 -20000  證券買入  中國聯通
2018-2-3  1500  15000  證券賣出  中國聯通

歡迎關注我的微信公眾號

參考資料:
1、Dropping Rows And Columns In pandas Dataframe
2、pandas過濾包含特定字符串的行
3、Pandas dataframe怎么刪除名稱包含特定字符串的列?
4、Pandas Drop


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM