• 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

  • 相关阅读:
    Vijos Oct.28 NOIP2012模拟赛
    QBXT day3 圆盘自动机 游戏 方块
    QBXT day2 最近点对 最长路径 山峰
    1609: [Usaco2008 Feb]Eating Together麻烦的聚餐
    1617: [Usaco2008 Mar]River Crossing渡河问题
    委托的Lambda表达式
    值转换器IValueConverter
    Silverlight中遇到的一些问题
    匿名方法
    Silverlight中的Binding
  • 原文地址:https://www.cnblogs.com/cocowool/p/8421997.html
Copyright © 2020-2023  润新知