pandas入门-数据结构(2)

来源:互联网 发布:linux wget 404 编辑:程序博客网 时间:2024/05/16 01:21

二、查看数据
1、查看数据的前几条&后几条数据

In [34]:  dates = pd.date_range('20150101',periods=30)          df=pd.DataFrame(np.random.randn(30,4),index=dates,columns=             list('ABCD'))          df.head()Out[34]:                    A           B          C           D         2015-01-01     -1.288885   0.100184    -1.123152   1.481061         2015-01-02     0.715922    1.054161    0.165483    0.954136         2015-01-03     1.007141    -1.843268   -1.658547   0.239509         2015-01-04     -0.117214   -0.427071   0.717396    2.705250         2015-01-05     0.344063    -0.785480   -2.934375   1.046888In [35]: df.tail(3)Out[35]:               A            B           C           D        2015-01-28  1.729071    2.424110    -0.276512   0.250709        2015-01-29  -0.267186   -0.137241   0.737485    -0.003254        2015-01-30  2.066402    -2.757171   -1.108371   2.139467

2、 显示索引、列和底层的numpy数据:

In [ ]: df.indexIn [37]: df.columnsOut[37]: Index([u'A', u'B', u'C', u'D'],dtype='object')

3、 describe()函数对于数据的快速统计汇总:

In [39]: df.describe()

4、 对数据的转置:

In [40]: df.T

5、 按轴进行排序

In [41]: df.head(5).sort_index(axis=1, ascending=False)Out[41]:                  D            C           B             A         2015-01-01     1.481061    -1.123152   0.100184    -1.288885         2015-01-02     0.954136    0.165483    1.054161    0.715922         2015-01-03     0.239509    -1.658547   -1.843268   1.007141         2015-01-04     2.705250    0.717396    -0.427071   -0.117214         2015-01-05     1.046888    -2.934375   -0.785480   0.344063

6、 按值进行排序

In [42]:  df.head().sort(columns='B')Out[42]:                    A           B            C          D         2015-01-03     1.007141    -1.843268   -1.658547   0.239509         2015-01-05     0.344063    -0.785480   -2.934375   1.046888         2015-01-04     -0.117214   -0.427071   0.717396    2.705250         2015-01-01     -1.288885   0.100184    -1.123152   1.481061         2015-01-02     0.715922    1.054161    0.165483    0.954136

7、描述

In [43]: df.shapeOut[43]: (30, 4)In [44]: df.sizeOut[44]: 120

三、选择
1. 通过下标选取数据:

df['one'],df.one

以上两个语句是等效的,都是返回df名称为one列的数据,返回的为一个Series。

df[0:3]df[0]

下标索引选取的是DataFrame的记录,与List相同DataFrame的下标也是从0开始,区间索引的话,为一个左闭右开的区间,即[0:3]选取的为0-2三条记录。与此等价,还可以用起始的索引名称和结束索引名称选取数据,如:df[‘a’:’b’]

有一点需要注意的是使用起始索引名称和结束索引名称时,也会包含结束索引的数据。以上两种方式返回的都是DataFrame。

2. 使用标签选取数据:

df.loc[行标签,列标签]

df.loc[‘a’:’b’]#选取ab两行数据

df.loc[:,’one’]#选取one列的数据

df.loc的第一个参数是行标签,第二个参数为列标签(可选参数,默认为所有列标签),两个参数既可以是列表也可以是单个字符,如果两个参数都为列表则返回的是DataFrame,否则,则为Series。

3. 使用位置选取数据:

df.iloc[行位置,列位置]

df.iloc[1,1]#选取第二行,第二列的值,返回的为单个值

df.iloc[0,2],:]#选取第一行及第三行的数据

df.iloc[0:2,:]#选取第一行到第三行(不包含)的数据

df.iloc[:,1]#选取所有记录的第一列的值,返回的为一个Series

df.iloc[1,:]#选取第一行数据,返回的为一个Series

PS:loc为location的缩写,iloc则为integer & location的缩写
4. 更广义的切片方式是使用.ix,它自动根据给到的索引类型判断是使用位置还是标签进行切片

df.ix[1,1]

df.ix[‘a’:’b’]

通过逻辑指针进行数据切片:

df[逻辑条件]

df[df.one >= 2]#单个逻辑条件

df[(df.one >=1 ) & (df.one < 3) ]#多个逻辑条件组合
1、获取
1)选择一个单独的列,这将会返回一个Series,等同于df.A:

In [45]: dates = pd.date_range('20150101',periods=5)         df = pd.DataFrame(np.random.randn(5,4),index=dates,columns=            list('ABCD'))         df['A']Out[45]: 2015-01-01   -0.350716         2015-01-02   -0.463883         2015-01-03   -1.127624         2015-01-04    0.304686         2015-01-05    0.081589         Freq: D, Name: A, dtype: float64

2)通过[ ]进行选择,这将会对行进行切片

In [46]: df[0:3]Out[46]:                      A         B          C           D         2015-01-01     -0.350716   -0.370551   -1.159448   0.112866         2015-01-02     -0.463883   0.273347    0.217844    0.249154         2015-01-03     -1.127624   0.785656    1.827608    -0.069509In [47]: df['20150104':'20150106']Out[47]:               A            B          C             D        2015-01-04  0.304686    0.897422    0.577268    -0.310842        2015-01-05  0.081589    0.845999    0.358836    -0.274310

2、通过标签选择
1)使用标签来获取一个交叉的区域

In [48]: df.loc[dates[0]]Out[48]: A   -0.350716         B   -0.370551         C   -1.159448         D    0.112866         Name: 2015-01-01 00:00:00, dtype: float64

2) 通过标签来在多个轴上进行选择

In [49]: df.loc[:,['A','B']]Out[49]:                A           B        2015-01-01  -0.350716   -0.370551        2015-01-02  -0.463883   0.273347        2015-01-03  -1.127624   0.785656        2015-01-04  0.304686    0.897422        2015-01-05  0.081589    0.845999

3) 标签切片

In [50]: df.loc['20150101':'20150103','A':'B']Out[50]:                      A         B         2015-01-01     -0.350716   -0.370551         2015-01-02     -0.463883   0.273347         2015-01-03     -1.127624   0.785656

4) 对于返回的对象进行维度缩减

In [51]: df.loc['20150101','A':'B']Out[51]: A   -0.350716         B   -0.370551         Name: 2015-01-01 00:00:00, dtype: float64

5) 获取一个标量

In [52]: df.loc[dates[0],'A']Out[52]: -0.3507158545641505

6) 快速访问一个标量(与上一个方法等价)

In [53]: df.at[dates[0],'A']Out[53]: -0.3507158545641505

3、通过位置选择
1) 通过传递数值进行位置选择(选择的是行)

In [54]: df.iloc[3]Out[54]: A    0.304686         B    0.897422         C    0.577268         D   -0.310842         Name: 2015-01-04 00:00:00, dtype: float64

2) 通过数值进行切片

In [55]: df.iloc[3:5,0:2]Out[55]:                    A          B         2015-01-04     0.304686    0.897422         2015-01-05     0.081589    0.845999

3) 通过指定一个位置的列表

In [56]: df.iloc[[1,2,4],[0,2]]Out[56]:                 A          C        2015-01-02  -0.463883   0.217844        2015-01-03  -1.127624   1.827608        2015-01-05  0.081589    0.358836

4)对行进行切片

In [57]: df.iloc[1:3,:]Out[57]:                   A            B           C           D         2015-01-02     -0.463883   0.273347    0.217844    0.249154         2015-01-03     -1.127624   0.785656    1.827608    -0.069509

5)对列进行切片

In [58]: df.iloc[:,1:3]Out[58]:                      B         C         2015-01-01     -0.370551   -1.159448         2015-01-02     0.273347    0.217844         2015-01-03     0.785656    1.827608         2015-01-04     0.897422    0.577268         2015-01-05     0.845999    0.358836

6)获取特定的值

In [59]: df.iloc[1,1]Out[59]: 0.27334674183560975In [60]: df.iat[1,1]Out[60]: 0.27334674183560975

4、布尔索引
1)使用一个单独列的值来选择数据:

In [61]: df[df.A>0]Out[61]:                A           B           C          D        2015-01-04  0.304686    0.897422    0.577268    -0.310842        2015-01-05  0.081589    0.845999    0.358836    -0.274310

2) 使用where操作来选择数据:

In [62]: df[df>0]Out[62]:                A        B      C      D         2015-01-01     NaN     NaN     NaN     0.112866         2015-01-02     NaN     0.273347    0.217844    0.249154         2015-01-03     NaN     0.785656    1.827608    NaN         2015-01-04     0.304686    0.897422    0.577268    NaN         2015-01-05     0.081589    0.845999    0.358836    NaN

3)使用isin()方法来过滤:

In [68]: df2 = pd.DataFrame(np.random.randn(5,4),index=dates,columns=           list('ABCD'))         df2['E']=['one', 'one','two','three','four']         df2In [69]: df2[df2['E'].isin(['two','four'])]Out[69]:                A             B         C          D         E        2015-01-03  -1.372667   -0.383118   0.169221    1.049816    two        2015-01-05  1.700180    0.228395    -1.447462   -2.134411  four
0 0
原创粉丝点击