Python3教程:Pandas模块删除数据的几种情况

打印 上一主题 下一主题

主题 894|帖子 894|积分 2682

开始之前,pandas中DataFrame删除对象可能存在几种情况
1、删除具体列
2、删除具体行
3、删除包含某些数值的行或者列
4、删除包含某些字符、文字的行或者列
本文就针对这四种情况探讨一下如何操作。
数据准备

模拟了一份股票交割的记录。
  1. In [1]: import pandas as pd
  2. In [2]: data = {
  3.    ...:     '证券名称' : ['格力电器','视觉中国','成都银行','中国联通','格力电器','视觉中国','成都银行','中国联通'],
  4.    ...:     '摘要': ['证券买入','证券买入','证券买入','证券买入','证券卖出','证券卖出','证券卖出','证券卖出'],
  5.    ...:     '成交数量' : [500,1000,1500,2000,500,500,1000,1500],
  6.    ...:     '成交金额' : [-5000,-10000,-15000,-20000,5500,5500,11000,15000]
  7.    ...: }
  8.    ...:
  9. 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'])
  10. In [4]: df
  11. Out[4]:
  12.           成交数量   成交金额    摘要  证券名称
  13. 2018-2-1   500  -5000  证券买入  格力电器
  14. 2018-2-1  1000 -10000  证券买入  视觉中国
  15. 2018-2-1  1500 -15000  证券买入  成都银行
  16. 2018-2-1  2000 -20000  证券买入  中国联通
  17. 2018-2-2   500   5500  证券卖出  格力电器
  18. 2018-2-2   500   5500  证券卖出  视觉中国
  19. 2018-2-2  1000  11000  证券卖出  成都银行
  20. 2018-2-3  1500  15000  证券卖出  中国联通
复制代码
删除具体列
  1. In [5]: df.drop('成交数量',axis=1)
  2. Out[5]:
  3.            成交金额    摘要  证券名称
  4. 2018-2-1  -5000  证券买入  格力电器
  5. 2018-2-1 -10000  证券买入  视觉中国
  6. 2018-2-1 -15000  证券买入  成都银行
  7. 2018-2-1 -20000  证券买入  中国联通
  8. 2018-2-2   5500  证券卖出  格力电器
  9. 2018-2-2   5500  证券卖出  视觉中国
  10. 2018-2-2  11000  证券卖出  成都银行
  11. 2018-2-3  15000  证券卖出  中国联通
复制代码
删除具体行
  1. In [6]: df.drop('2018-2-3')
  2. Out[6]:
  3.           成交数量   成交金额    摘要  证券名称
  4. 2018-2-1   500  -5000  证券买入  格力电器
  5. 2018-2-1  1000 -10000  证券买入  视觉中国
  6. 2018-2-1  1500 -15000  证券买入  成都银行
  7. 2018-2-1  2000 -20000  证券买入  中国联通
  8. 2018-2-2   500   5500  证券卖出  格力电器
  9. 2018-2-2   500   5500  证券卖出  视觉中国
  10. 2018-2-2  1000  11000  证券卖出  成都银行
复制代码
也可以根据行号删除记录,比如删除第三行
  1. In [22]: df.drop(df.index[7])
  2. Out[22]:
  3.           成交数量   成交金额    摘要  证券名称
  4. 2018-2-1   500  -5000  证券买入  格力电器
  5. 2018-2-1  1000 -10000  证券买入  视觉中国
  6. 2018-2-1  1500 -15000  证券买入  成都银行
  7. 2018-2-1  2000 -20000  证券买入  中国联通
  8. 2018-2-2   500   5500  证券卖出  格力电器
  9. 2018-2-2   500   5500  证券卖出  视觉中国
  10. 2018-2-2  1000  11000  证券卖出  成都银行
复制代码
注意,这个办法其实不是按照行号删除,而是按照索引删除。如果index为3,则会将前4条记录都删除。这个方法支持一个范围,以及用负数表示从末尾删除。
删除特定数值的行(删除成交金额小于10000)
  1. In [7]: df[ df['成交金额'] > 10000]
  2. Out[7]:
  3.           成交数量   成交金额    摘要  证券名称
  4. 2018-2-2  1000  11000  证券卖出  成都银行
  5. 2018-2-3  1500  15000  证券卖出  中国联通
复制代码
本例其实是筛选,如果需要保留,可以将筛选后的对象赋值给自己即可。
删除某列包含特殊字符的行
  1. '''
  2. 学习中遇到问题没人解答?小编创建了一个Python学习交流群:711312441
  3. 寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
  4. '''
  5. In [11]: df[ ~ df['证券名称'].str.contains('联通') ]
  6. Out[11]:
  7.           成交数量   成交金额    摘要  证券名称
  8. 2018-2-1   500  -5000  证券买入  格力电器
  9. 2018-2-1  1000 -10000  证券买入  视觉中国
  10. 2018-2-1  1500 -15000  证券买入  成都银行
  11. 2018-2-2   500   5500  证券卖出  格力电器
  12. 2018-2-2   500   5500  证券卖出  视觉中国
  13. 2018-2-2  1000  11000  证券卖出  成都银行
复制代码
如果想取包含某些字符的记录,可以去掉~
  1. In [12]: df[ df['证券名称'].str.contains('联通') ]
  2. Out[12]:
  3.           成交数量   成交金额    摘要  证券名称
  4. 2018-2-1  2000 -20000  证券买入  中国联通
  5. 2018-2-3  1500  15000  证券卖出  中国联通
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

民工心事

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表