Fork me on GitHub

pandas系列2_选择数据

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

  • 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]]

查看指定的行列数据

1
2
# 指定列属性查看数据,多个列属性放在列表中
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
1
2
# 通过切片形式,指定行标签查看指定的行数据
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
1
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 标签索引

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

1
df.loc[dates[0]]
1
2
3
4
5
A   -0.693593
B -0.362323
C 1.678106
D -1.180693
Name: 2019-09-24 00:00:00, dtype: float64
1
dates[0]
1
Timestamp('2019-09-24 00:00:00', freq='D')
1
2
# 选择行和列
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
1
2
# 索引通过标签来实现
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
1
2
# 指定的行或者列可以是切片形式
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为整型,表示通过数字来进行索引

1
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
1
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
1
df.iloc[1:3, 0:2]  # 切片形式,连续性
A B
2019-09-25 1.438213 -2.261810
2019-09-26 1.710651 -1.472062
1
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
1
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

获取具体位置的元素

1
df.iloc[1,2]
1
-1.035993773960585
1
df.iat[1,2]    # 等同上面
1
-1.035993773960585

布尔索引

1
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
1
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
1
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方法过滤

1
df2 = df.copy()
1
2
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
1
df2['E'].isin(['two', 'four'])    # 得到bool值
1
2
3
4
5
6
7
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
1
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

生成新的列属性

1
df2['F'] = df2['A'] + df['B']    # 只能通过类似字典的形式,不能通过对象的属性形式
1
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

本文标题:pandas系列2_选择数据

发布时间:2019年10月04日 - 20:10

原始链接:http://www.renpeter.cn/2019/10/04/pandas%E7%B3%BB%E5%88%972-%E9%80%89%E6%8B%A9%E6%95%B0%E6%8D%AE.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

Coffee or Tea