如何从众多数据选择出我们所需要的数据,是数据分析中重点。本文中使用的方法
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 |
# 通过切片形式,指定行标签查看指定的行数据
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 |
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 |
# 索引通过标签来实现
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 |
# 指定的行或者列可以是切片形式
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
记为intloc
,int
为整型,表示通过数字来进行索引
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 |
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 |
df.iloc[1:3, 0:2] # 切片形式,连续性
A | B | |
---|---|---|
2019-09-25 | 1.438213 | -2.261810 |
2019-09-26 | 1.710651 | -1.472062 |
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 |
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 |
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 |
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 |
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 |