开始之前,pandas中DataFrame删除对象可能存在几种情况
1、删除具体列
2、删除具体行
3、删除包含某些数值的行或者列
4、删除包含某些字符、文字的行或者列
本文就针对这四种情况探讨一下如何操作。
数据准备
模拟了一份股票交割的记录。
In [1]: import pandas as pd
开始之前,pandas中DataFrame删除对象可能存在几种情况
1、删除具体列
2、删除具体行
3、删除包含某些数值的行或者列
4、删除包含某些字符、文字的行或者列
本文就针对这四种情况探讨一下如何操作。
模拟了一份股票交割的记录。
In [1]: import pandas as pd
In [2]: data = {
...: <span class="hljs-string">'证券名称'</span> : [<span class="hljs-string">'格力电器'</span>,<span class="hljs-string">'视觉中国'</span>,<span class="hljs-string">'成都银行'</span>,<span class="hljs-string">'中国联通'</span>,<span class="hljs-string">'格力电器'</span>,<span class="hljs-string">'视觉中国'</span>,<span class="hljs-string">'成都银行'</span>,<span class="hljs-string">'中国联通'</span>],
...: <span class="hljs-string">'摘要'</span>: [<span class="hljs-string">'证券买入'</span>,<span class="hljs-string">'证券买入'</span>,<span class="hljs-string">'证券买入'</span>,<span class="hljs-string">'证券买入'</span>,<span class="hljs-string">'证券卖出'</span>,<span class="hljs-string">'证券卖出'</span>,<span class="hljs-string">'证券卖出'</span>,<span class="hljs-string">'证券卖出'</span>],
...: <span class="hljs-string">'成交数量'</span> : [500,1000,1500,2000,500,500,1000,1500],
...: <span class="hljs-string">'成交金额'</span> : [-5000,-10000,-15000,-20000,5500,5500,11000,15000]
...: }
...:
In [3]: df = pd.DataFrame(data, index = [<span class="hljs-string">'2018-2-1'</span>,<span class="hljs-string">'2018-2-1'</span>,<span class="hljs-string">'2018-2-1'</span>,<span class="hljs-string">'2018-2-1'</span>,<span class="hljs-string">'2018-2-2'</span>,<span class="hljs-string">'2018-2-2'</span>,<span class="hljs-string">'2018-2-2'</span>,<span class="hljs-string">'2018-2-3'</span>])
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条记录都删除。这个方法支持一个范围,以及用负数表示从末尾删除。
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 证券卖出 中国联通
原文链接: Pandas删除数据的几种情况
参考资料:
1、Dropping Rows And Columns In pandas Dataframe
2、pandas过滤包含特定字符串的行
3、Pandas dataframe怎么删除名称包含特定字符串的列?
4、Pandas Drop