python3-Pandas选择数据

本文主要介绍了Pandas的选择数据的几种筛选方法。

1、前提

建立一个6X4的矩阵,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
dates = pd.date_range('20130101', periods=6)
df = pd.DataFrame(np.arange(24).reshape((6,4)),index=dates, columns=['A','B','C','D'])

"""
A B C D
2013-01-01 0 1 2 3
2013-01-02 4 5 6 7
2013-01-03 8 9 10 11
2013-01-04 12 13 14 15
2013-01-05 16 17 18 19
2013-01-06 20 21 22 23
"""

2、简单筛选

如果我们想选取DataFrame中的数据,下面描述了两种途径, 他们都能达到同一个目的:

1
2
3
4
5
6
7
8
9
10
11
12
print(df['A'])
print(df.A)

"""
2013-01-01 0
2013-01-02 4
2013-01-03 8
2013-01-04 12
2013-01-05 16
2013-01-06 20
Freq: D, Name: A, dtype: int64
"""

让选择跨越多行或多列:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
print(df[0:3]) #选取0、1、2三行的数据,不包含末端

"""
A B C D
2013-01-01 0 1 2 3
2013-01-02 4 5 6 7
2013-01-03 8 9 10 11
"""

print(df['20130102':'20130104']) #包含两端行内容

"""
A B C D
2013-01-02 4 5 6 7
2013-01-03 8 9 10 11
2013-01-04 12 13 14 15
"""

如果选择df[3:3]将会是一个空对象。后者选择2013010220130104标签之间的数据,并且包括这两个标签。

3、根据loc标签筛选

同样我们可以使用标签来选择数据 loc, 本例子主要通过标签名字选择某一行数据, 或者通过选择某行或者所有行(:代表所有行)然后选其中某一列或几列数据:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
print(df.loc['20130102'])
"""
A 4
B 5
C 6
D 7
Name: 2013-01-02 00:00:00, dtype: int64
"""

print(df.loc[:,['A','B']])
"""
A B
2013-01-01 0 1
2013-01-02 4 5
2013-01-03 8 9
2013-01-04 12 13
2013-01-05 16 17
2013-01-06 20 21
"""

print(df.loc['20130102',['A','B']])
"""
A 4
B 5
Name: 2013-01-02 00:00:00, dtype: int64
"""

4、根据序列iloc

另外我们可以采用位置进行选择 iloc, 在这里我们可以通过位置选择在不同情况下所需要的数据,例如选某一个,连续选或者跨行选等操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
print(df.iloc[3,1])
# 13 选择第4行第2列

print(df.iloc[3:5,1:3])
# 选择第4行到第5行,列为第2列到第3列(不包含最后那个数字)
"""
B C
2013-01-04 13 14
2013-01-05 17 18
"""

print(df.iloc[[1,3,5],1:3])
# 选择第 2、4 、6行的数据,列为2-3列
"""
B C
2013-01-02 5 6
2013-01-04 13 14
2013-01-06 21 22

"""

在这里我们可以通过位置选择在不同情况下所需要的数据, 例如选某一个,连续选或者跨行选等操作。

5、根据混合的这两种 ix

当然我们可以采用混合选择 ix, 其中选择’A’和’C’的两列,并选择前三行的数据

1
2
3
4
5
6
7
print(df.ix[:3,['A','C']])
"""
A C
2013-01-01 0 2
2013-01-02 4 6
2013-01-03 8 10
"""

6、通过判断的筛选

最后我们可以采用判断指令 (Boolean indexing) 进行选择. 我们可以约束某项条件然后选择出当前所有数据.

1
2
3
4
5
6
7
print(df[df.A>8])
"""
A B C D
2013-01-04 12 13 14 15
2013-01-05 16 17 18 19
2013-01-06 20 21 22 23
"""
-------------The End-------------
谢谢大锅请我喝杯阔乐~