Pandas删除数据

本文为转载,查看原文请点击这里

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

数据准备

模拟了一份股票交割的记录。

import pandas as pd

data = {
    '证券名称' : ['格力电器','视觉中国','成都银行','中国联通','格力电器','视觉中国','成都银行','中国联通'],
    '摘要': ['证券买入','证券买入','证券买入','证券买入','证券卖出','证券卖出','证券卖出','证券卖出'],
    '成交数量' : [500,1000,1500,2000,500,500,1000,1500],
    '成交金额' : [-5000,-10000,-15000,-20000,5500,5500,11000,15000]
}

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 [55]: df
Out[55]:
          证券名称    摘要  成交数量   成交金额
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 [56]: df.drop('成交数量',axis=1)
Out[56]:
          证券名称    摘要   成交金额
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 [57]: df.drop('2018-2-3')
Out[57]:
          证券名称    摘要  成交数量   成交金额
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 [58]: df.drop(df.index[7])
Out[58]:
          证券名称    摘要  成交数量   成交金额
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 [59]: df[ df['成交金额'] > 10000]
Out[59]:
          证券名称    摘要  成交数量   成交金额
2018-2-2  成都银行  证券卖出  1000  11000
2018-2-3  中国联通  证券卖出  1500  15000

本例其实是筛选,如果需要保留,可以将筛选后的对象赋值给自己即可。

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

In [60]: df[ ~ df['证券名称'].str.contains('联通') ]
Out[60]:
          证券名称    摘要  成交数量   成交金额
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 [62]: df[ df['证券名称'].str.contains('联通') ]
Out[62]:
          证券名称    摘要  成交数量   成交金额
2018-2-1  中国联通  证券买入  2000 -20000
2018-2-3  中国联通  证券卖出  1500  15000

 

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值