Python数据分析系列之Pandas常用操作第三篇

195 阅读4分钟

这是我参与11月更文挑战的第8天,活动详情查看:2021最后一次更文挑战 在Pandas中对数据进行选择操作是非常高频的,Pandas提供了非常丰富且便利的方法:

  1. 按行标签选择数据
  2. 列标签获取多列数据
  3. 结合行标签和列标签获取多行多列数据
  4. 根据行标签和列标签获取某行多列数据
  5. 根据特定行标签和特定的列标签获取某一个值
  6. 按索引位置(第几个位置,0索引为第一个位置)获取数据

数据选择的常用方法

在ipython解释器下,构造测试数据:
构造了以时间日期为行标签的7行数据,ABCD为列标签的DataFrame数据
时间从2021-11-07到2021-11-12的7天数据, ABCD的数据均为随机数

In [1]: import numpy as np

In [2]: import pandas as pd

In [3]: dates = pd.date_range('20211107', periods=6)

In [4]: data = pd.DataFrame(np.random.randn(6, 4), index=d
   ...: ates, columns=['A', 'B', 'C', 'D'])

In [5]: data
Out[5]:
                   A         B         C         D
2021-11-07 -0.877244  1.713848  0.144780  0.011379
2021-11-08 -0.213253  0.344520 -0.658004  0.648373
2021-11-09  0.408933 -0.145004 -1.644283 -0.402420
2021-11-10  0.687184  0.412389  0.571787  0.069970
2021-11-11  0.984974 -1.827038  1.206369 -1.701110
2021-11-12  2.179770 -0.607483 -0.170085  0.617194

下面的例子使用DataFrame.loc[行标签]进行按行标签选择数据:
下面的例子data.loc['2021-11-07']选取了2021-11-07当天的那行数据

In [11]: data.loc['2021-11-07']
Out[11]:
A   -0.877244
B    1.713848
C    0.144780
D    0.011379
Name: 2021-11-07 00:00:00, dtype: float64

下面的例子使用DataFrame.loc[:, [列标签]]进行按列标签获取多列数据:
下面的例子data.loc[:, ['A', 'B']]表示选取了所有行即每天的A和B列的数据 列标签获取多列数据:

In [15]: data.loc[:, ['A', 'B']]
Out[15]:
                   A         B
2021-11-07 -0.877244  1.713848
2021-11-08 -0.213253  0.344520
2021-11-09  0.408933 -0.145004
2021-11-10  0.687184  0.412389
2021-11-11  0.984974 -1.827038
2021-11-12  2.179770 -0.607483

下面的例子使用data.loc[行标签1:行标签2, [列标签]]进行结合行标签和列标签获取多行多列数据:
下面的例子data.loc['2021-11-07':'2021-11-09', ['A', 'B']]表示选取了'2021-11-07'到'2021-11-09'之间的行的的A和B列的数据 结合行标签和列标签获取多行多列数据:

In [16]: data.loc['2021-11-07':'2021-11-09', ['A', 'B']]
Out[16]:
                   A         B
2021-11-07 -0.877244  1.713848
2021-11-08 -0.213253  0.344520
2021-11-09  0.408933 -0.145004

下面的例子使用data.loc[行标签, [列标签]]进行根据行标签和列标签获取某行多列数据:
下面的例子data.loc['2021-11-07', ['A', 'B']]表示选取了'2021-11-07'所在行的A和B列的数据 根据行标签和列标签获取某行多列数据:

In [17]: data.loc['2021-11-07', ['A', 'B']]
Out[17]:
A   -0.877244
B    1.713848
Name: 2021-11-07 00:00:00, dtype: float64

下面的例子使用data.loc[行标签, 列标签]或data.at[行标签, 列标签]进行根据特定行标签和特定的列标签获取某一个值:
下面的例子data.loc['2021-11-07', 'A']表示选取了'2021-11-07'所在行的A列的数据 根据特定行标签和特定的列标签获取某一个值: 方法一:

In [19]: data.loc['2021-11-07', 'A']
Out[19]: -0.877244243377641

方法二:

In [20]: data.at['2021-11-07', 'A']
Out[20]: -0.877244243377641

下面介绍按索引位置进行获取数据的方法:
下面的例子使用data.iloc[行索引号]进行按索引号位置(第几个位置,0索引为第一个位置)获取数据:
下面的例子data.iloc[0]表示选取了第一行的所有列的数据 按索引位置(第几个位置,0索引为第一个位置)获取数据:

In [23]: data.iloc[0]
Out[23]:
A   -0.877244
B    1.713848
C    0.144780
D    0.011379
Name: 2021-11-07 00:00:00, dtype: float64