开始之前,pandas中dataframe删除对象可能存在几种情况
1、删除具体列
2、删除具体行
3、删除包含某些数值的行或者列
4、删除包含某些字符、文字的行或者列
本文就针对这四种情况探讨一下如何操作。
数据准备
模拟了一份股票交割的记录。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
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 证券卖出 中国联通
|
删除具体列
1
2
3
4
5
6
7
8
9
10
11
|
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 证券卖出 中国联通
|
删除具体行
1
2
3
4
5
6
7
8
9
10
|
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 证券卖出 成都银行
|
也可以根据行号删除记录,比如删除第三行
1
2
3
4
5
6
7
8
9
10
|
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)
1
2
3
4
5
|
in [ 7 ]: df[ df[ '成交金额' ] > 10000 ]
out[ 7 ]:
成交数量 成交金额 摘要 证券名称
2018 - 2 - 2 1000 11000 证券卖出 成都银行
2018 - 2 - 3 1500 15000 证券卖出 中国联通
|
本例其实是筛选,如果需要保留,可以将筛选后的对象赋值给自己即可。
删除某列包含特殊字符的行
1
2
3
4
5
6
7
8
9
|
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 证券卖出 成都银行
|
如果想取包含某些字符的记录,可以去掉~
1
2
3
4
5
|
in [ 12 ]: df[ df[ '证券名称' ]. str .contains( '联通' ) ]
out[ 12 ]:
成交数量 成交金额 摘要 证券名称
2018 - 2 - 1 2000 - 20000 证券买入 中国联通
2018 - 2 - 3 1500 15000 证券卖出 中国联通
|
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://www.cnblogs.com/cocowool/p/8421997.html