pandas系列2_选择数据

2021-03-02 14:47:36 浏览数 (1)

如何从众多数据选择出我们所需要的数据,是数据分析中重点。本文中使用的方法

  • loc:通过标签获取,等同于.at
  • iloc:通过数字索引获取,等同于.iat
总结
  • df.loc[[......]]:可以使用数字索引,也可以使用标签索引,还可以用切片的形式
  • df.iloc[[.....]]:只能使用数字索引,可以是非连续或者连续(等差形式也OK)
  • 布尔索引:df2[df2['E'].isin(['two', 'four'])]
  • 同时指定行和列:
    • df.loc[:, ["A","B"]]
    • df.iloc[[1, 2, 4], [0, 2]]
查看指定的行列数据
代码语言:javascript复制
# 指定列属性查看数据,多个列属性放在列表中
df[["B","C"]]

B

C

2019-09-24

-0.362323

1.678106

2019-09-25

-2.261810

-1.035994

2019-09-26

-1.472062

1.081443

2019-09-27

0.292800

-0.593975

2019-09-28

0.002751

-0.233792

2019-09-29

1.001527

1.521685

代码语言:javascript复制
# 通过切片形式,指定行标签查看指定的行数据
df[1:3]   # 默认数字索引

A

B

C

D

2019-09-25

1.438213

-2.261810

-1.035994

0.433404

2019-09-26

1.710651

-1.472062

1.081443

1.109993

代码语言:javascript复制
df["20190924":"20190927"]     # 使用的是创建的索引

A

B

C

D

2019-09-24

-0.693593

-0.362323

1.678106

-1.180693

2019-09-25

1.438213

-2.261810

-1.035994

0.433404

2019-09-26

1.710651

-1.472062

1.081443

1.109993

2019-09-27

-0.189173

0.292800

-0.593975

-0.171872

loc 标签索引

根据标签(不是自带的数字索引)查看数据

代码语言:javascript复制
df.loc[dates[0]]
代码语言:javascript复制
A   -0.693593
B   -0.362323
C    1.678106
D   -1.180693
Name: 2019-09-24 00:00:00, dtype: float64
代码语言:javascript复制
dates[0]
代码语言:javascript复制
Timestamp('2019-09-24 00:00:00', freq='D')
代码语言:javascript复制
# 选择行和列
df.loc[:, ["A","B"]]   # 选择所有行,然后AB两个列

A

B

2019-09-24

-0.693593

-0.362323

2019-09-25

1.438213

-2.261810

2019-09-26

1.710651

-1.472062

2019-09-27

-0.189173

0.292800

2019-09-28

0.561579

0.002751

2019-09-29

-1.037907

1.001527

代码语言:javascript复制
# 索引通过标签来实现
df.loc['20190924':'20190927', ['A', 'B']]

A

B

2019-09-24

-0.693593

-0.362323

2019-09-25

1.438213

-2.261810

2019-09-26

1.710651

-1.472062

2019-09-27

-0.189173

0.292800

代码语言:javascript复制
# 指定的行或者列可以是切片形式
df.loc['20190924':'20190927', 'A':'B']

A

B

2019-09-24

-0.693593

-0.362323

2019-09-25

1.438213

-2.261810

2019-09-26

1.710651

-1.472062

2019-09-27

-0.189173

0.292800

iloc数字索引

记忆放法:iloc记为intlocint为整型,表示通过数字来进行索引

代码语言:javascript复制
df

A

B

C

D

2019-09-24

-0.693593

-0.362323

1.678106

-1.180693

2019-09-25

1.438213

-2.261810

-1.035994

0.433404

2019-09-26

1.710651

-1.472062

1.081443

1.109993

2019-09-27

-0.189173

0.292800

-0.593975

-0.171872

2019-09-28

0.561579

0.002751

-0.233792

1.624140

2019-09-29

-1.037907

1.001527

1.521685

-0.049556

代码语言:javascript复制
df.iloc[1:3]

A

B

C

D

2019-09-25

1.438213

-2.261810

-1.035994

0.433404

2019-09-26

1.710651

-1.472062

1.081443

1.109993

代码语言:javascript复制
df.iloc[1:3, 0:2]  # 切片形式,连续性

A

B

2019-09-25

1.438213

-2.261810

2019-09-26

1.710651

-1.472062

代码语言:javascript复制
df.iloc[[1, 2, 4], [0, 2]]  # 行索引是离散的值

A

C

2019-09-25

1.438213

-1.035994

2019-09-26

1.710651

1.081443

2019-09-28

0.561579

-0.233792

代码语言:javascript复制
df.iloc[:, 1:3]

B

C

2019-09-24

-0.362323

1.678106

2019-09-25

-2.261810

-1.035994

2019-09-26

-1.472062

1.081443

2019-09-27

0.292800

-0.593975

2019-09-28

0.002751

-0.233792

2019-09-29

1.001527

1.521685

获取具体位置的元素
代码语言:javascript复制
df.iloc[1,2]
代码语言:javascript复制
-1.035993773960585
代码语言:javascript复制
df.iat[1,2]    # 等同上面
代码语言:javascript复制
-1.035993773960585
布尔索引
代码语言:javascript复制
df

A

B

C

D

2019-09-24

-0.693593

-0.362323

1.678106

-1.180693

2019-09-25

1.438213

-2.261810

-1.035994

0.433404

2019-09-26

1.710651

-1.472062

1.081443

1.109993

2019-09-27

-0.189173

0.292800

-0.593975

-0.171872

2019-09-28

0.561579

0.002751

-0.233792

1.624140

2019-09-29

-1.037907

1.001527

1.521685

-0.049556

代码语言:javascript复制
df[df.A > 0]  # 将属性A中大于0的行全部选择出出来

A

B

C

D

2019-09-25

1.438213

-2.261810

-1.035994

0.433404

2019-09-26

1.710651

-1.472062

1.081443

1.109993

2019-09-28

0.561579

0.002751

-0.233792

1.624140

代码语言:javascript复制
df[df > 0]   # 满足bool条件的DF中选取值

A

B

C

D

2019-09-24

NaN

NaN

1.678106

NaN

2019-09-25

1.438213

NaN

NaN

0.433404

2019-09-26

1.710651

NaN

1.081443

1.109993

2019-09-27

NaN

0.292800

NaN

NaN

2019-09-28

0.561579

0.002751

NaN

1.624140

2019-09-29

NaN

1.001527

1.521685

NaN

isin方法过滤
代码语言:javascript复制
df2 = df.copy()
代码语言:javascript复制
df2['E'] = ['one', 'one', 'two', 'three', 'four', 'three']
df2

A

B

C

D

E

2019-09-24

-0.693593

-0.362323

1.678106

-1.180693

one

2019-09-25

1.438213

-2.261810

-1.035994

0.433404

one

2019-09-26

1.710651

-1.472062

1.081443

1.109993

two

2019-09-27

-0.189173

0.292800

-0.593975

-0.171872

three

2019-09-28

0.561579

0.002751

-0.233792

1.624140

four

2019-09-29

-1.037907

1.001527

1.521685

-0.049556

three

代码语言:javascript复制
df2['E'].isin(['two', 'four'])    # 得到bool值
代码语言:javascript复制
2019-09-24    False
2019-09-25    False
2019-09-26     True
2019-09-27    False
2019-09-28     True
2019-09-29    False
Freq: D, Name: E, dtype: bool
代码语言:javascript复制
df2[df2['E'].isin(['two', 'four'])]

A

B

C

D

E

2019-09-26

1.710651

-1.472062

1.081443

1.109993

two

2019-09-28

0.561579

0.002751

-0.233792

1.624140

four

生成新的列属性
代码语言:javascript复制
df2['F'] = df2['A']   df['B']    # 只能通过类似字典的形式,不能通过对象的属性形式
代码语言:javascript复制
df2

A

B

C

D

E

F

2019-09-24

-0.693593

-0.362323

1.678106

-1.180693

one

-1.055915

2019-09-25

1.438213

-2.261810

-1.035994

0.433404

one

-0.823597

2019-09-26

1.710651

-1.472062

1.081443

1.109993

two

0.238589

2019-09-27

-0.189173

0.292800

-0.593975

-0.171872

three

0.103627

2019-09-28

0.561579

0.002751

-0.233792

1.624140

four

0.564329

2019-09-29

-1.037907

1.001527

1.521685

-0.049556

three

-0.036380

nan

0 人点赞