Pandas选择数据

       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)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值