Pandas是一个非常好用的工具,可以用来处理各种格式的数据,例如过滤注释信息生成最终结果。此文仅仅是记录如何在Pandas中选择数据。当然,这仅仅是从网络上获取的一部分。侵联删。
import pandas as pd
data=pd.read_csv("detail.part.txt", sep="\t")
data.head()
code name changepercent trade open high low
0 603999 读者传媒 -1.987 5.92 6.00 6.00 5.91
1 603998 方盛制药 -1.995 7.86 7.98 8.02 7.84
2 603997 继峰股份 0.000 10.87 0.00 0.00 0.00
3 603996 中新科技 -3.081 11.01 11.43 11.60 10.83
4 603993 洛阳钼业 -1.363 5.79 5.83 5.89 5.74
1. 按行选取数据
#选取连续多行数据
data[:3]
Out[23]:
code name changepercent trade open high low
0 603999 读者传媒 -1.987 5.92 6.00 6.00 5.91
1 603998 方盛制药 -1.995 7.86 7.98 8.02 7.84
2 603997 继峰股份 0.000 10.87 0.00 0.00 0.00
data.iloc[12:16]
Out[24]:
code name changepercent trade open high low
12 603980 吉华集团 -0.836 15.42 15.45 15.51 15.35
13 603979 金诚信 -1.416 9.05 9.18 9.26 9.04
14 603978 深圳新星 0.412 34.09 34.01 34.75 33.90
15 603977 国泰集团 -0.228 8.75 8.76 8.86 8.66
data.loc[29:32]
Out[25]:
code name changepercent trade open high low
29 603936 博敏电子 -1.729 19.33 19.60 19.98 19.27
30 603933 睿能科技 -0.801 22.30 22.49 22.58 22.02
31 603929 亚翔集成 -1.178 20.97 20.95 21.50 20.90
32 603928 兴业股份 -3.333 16.24 16.79 16.79 16.21
#选取某一行数据
data.iloc[1493]
Out[56]:
code 300676
name 华大基因
changepercent -2.89
trade 76.6
open 78.49
high 79.58
low 75.88
Name: 1493, dtype: object
data.ix[133]
Out[70]:
code 603708
name 家家悦
changepercent 3.408
trade 23.67
open 22.54
high 23.74
low 22.22
Name: 133, dtype: object
data.iloc[3483:3484]
Out[62]:
code name changepercent trade open high low
3483 63 中兴通讯 0.587 15.43 15.24 15.85 14.83
#选取不连续的行
data.loc[[3483,1493,1260,1230]]
Out[26]:
code name changepercent trade open high low
3483 63 中兴通讯 0.587 15.43 15.24 15.85 14.83
1493 300676 华大基因 -2.890 76.60 78.49 79.58 75.88
1260 600200 江苏吴中 -1.423 7.62 7.71 7.74 7.57
1230 600234 ST山水 -2.517 7.36 7.50 7.58 7.21
data.loc[100:126:4]
Out[66]:
code name changepercent trade open high low
100 603798 康普顿 0.291 13.80 13.75 13.85 13.60
104 603787 新日股份 -1.228 10.46 10.75 10.89 10.44
108 603776 永安行 -1.197 35.50 35.57 35.98 35.42
112 603766 隆鑫通用 -0.350 5.69 5.70 5.72 5.62
116 603737 三棵树 -0.351 48.24 48.09 48.30 47.18
120 603728 鸣志电器 -2.148 14.58 15.38 15.39 14.58
124 603722 阿科力 -2.667 39.78 40.88 41.32 38.52
2.按列选取数据
#列名称
data.columns
Out[71]: Index(['code', 'name', 'changepercent', 'trade', 'open', 'high', 'low'], dtype='object')
#选取某一列
data['code'].head()
Out[72]:
0 603999
1 603998
2 603997
3 603996
4 603993
Name: code, dtype: int64
data.name.tail()
Out[135]:
3597 ST明科
3598 退市长油
3599 *ST保千
3600 凤凰光学
3601 银鸽投资
Name: name, dtype: object
#选取某列的指定部分
data.name[12:19]
Out[140]:
12 吉华集团
13 金诚信
14 深圳新星
15 国泰集团
16 正川股份
17 中农立华
18 银龙股份
Name: name, dtype: object
data.name[12:19:2]
Out[141]:
12 吉华集团
14 深圳新星
16 正川股份
18 银龙股份
Name: name, dtype: object
#根据列名称选取指列
data[['code','name', 'low']].head()
Out[73]:
code name low
0 603999 读者传媒 5.91
1 603998 方盛制药 7.84
2 603997 继峰股份 0.00
3 603996 中新科技 10.83
4 603993 洛阳钼业 5.74
data[['code','low']].head(100).tail()
Out[115]:
code low
95 603806 21.64
96 603803 12.58
97 603801 41.00
98 603800 14.43
99 603799 69.70
#选择连续多列
data.loc[:,:'high'].head()
Out[96]:
code name changepercent trade open high
0 603999 读者传媒 -1.987 5.92 6.00 6.00
1 603998 方盛制药 -1.995 7.86 7.98 8.02
2 603997 继峰股份 0.000 10.87 0.00 0.00
3 603996 中新科技 -3.081 11.01 11.43 11.60
4 603993 洛阳钼业 -1.363 5.79 5.83 5.89
data.iloc[2000:2018,1:4]
Out[101]:
name changepercent trade
2000 振东制药 -1.493 4.62
2001 恒泰艾普 -2.720 6.08
2002 神雾环保 -2.500 6.63
2003 安居宝 -2.405 4.87
2004 瑞凌股份 -0.958 5.17
2005 科泰电源 0.125 8.04
2006 科融环境 -3.106 3.12
2007 昌红科技 -2.560 6.09
2008 世纪瑞尔 -0.774 5.13
2009 量子生物 0.067 15.01
2010 天舟文化 -2.464 4.75
2011 香雪制药 -2.163 7.69
2012 汤臣倍健 0.000 0.00
2013 中金环境 -0.978 5.06
2014 宋城演艺 0.305 26.28
2015 星普医科 -3.469 9.46
2016 沃森生物 9.995 21.35
2017 和顺电气 -2.169 8.12
#选取不连续的多行,多列数据
data.iloc[1493:1509:2,1::2]
Out[106]:
name trade high
1493 华大基因 76.60 79.58
1495 佩蒂股份 51.03 52.80
1497 富满电子 30.26 31.10
1499 沪宁股份 20.82 21.02
1501 必创科技 32.70 33.73
1503 飞鹿股份 13.11 13.55
1505 科蓝软件 16.42 17.52
1507 圣邦股份 116.60 118.88
data.loc[1493:1509:2,['name','high','low']]
Out[107]:
name high low
1493 华大基因 79.58 75.88
1495 佩蒂股份 52.80 50.88
1497 富满电子 31.10 30.03
1499 沪宁股份 21.02 20.81
1501 必创科技 33.73 32.70
1503 飞鹿股份 13.55 13.11
1505 科蓝软件 17.52 16.42
1507 圣邦股份 118.88 109.50
1509 中孚信息 21.69 20.81
3.选取指定位置数据
data.iat[1493,1]
Out[114]: '华大基因'
data.at[1,'name']
Out[132]: '方盛制药'
总结
1. DataFrame可以按照行和列选择目标数据,通常使用loc,iloc,ix函数。选取指定位置的数据使用iat,at函数;
2.上述三个函数都是按照函数[行,列]的格式选择数据;
3. 函数中的行和列参数包含3个部分,分别是起始位置,结束位置,步长。例如,data.iloc[2000:2018:2,1:5:2];
4. loc,at选择列只能使用列名称不能使用列的位置;
5. iloc,iat选择列只能使用列的位置不能使用列的名称;
6. DataFrame对象只能进行行选择或者列选择,不能同时进行列选择,列选择只能是列名;
7. DataFrame对象进行选取后,大部分情况下返回的仍旧是DataFrame对象,所以可以对DataFrame链式操作。例如,data[120:136:2].code。
参考内容:
1. Pandas DataFrame的loc、iloc、ix和at/iat浅析
2. 一张图弄懂Python索引和切片
3. Pandas之容易让人混淆的行选择和列选择
4. pandas中Dataframe的查询方法([], loc, iloc, at, iat, ix)