1. 程式人生 > >Python資料處理之(十 一)Pandas 選擇資料

Python資料處理之(十 一)Pandas 選擇資料

首先先建立一個6X4的矩陣

>>> import pandas as pd
>>> import numpy as np
>>> dates=pd.date_range('20181121',periods=6)
>>> df=pd.DataFrame(np.arange(24).reshape(6,4),index=dates,columns=['A','B','C','D'])
>>> print(df)
             A   B   C   D
2018-11-21   0   1
2 3 2018-11-22 4 5 6 7 2018-11-23 8 9 10 11 2018-11-24 12 13 14 15 2018-11-25 16 17 18 19 2018-11-26 20 21 22 23

一、簡單的篩選

如果我們想選取DataFrame中的資料,下面描述了兩種途徑, 他們都能達到同一個目的:

>>> print(df.A)
2018-11-21     0
2018-11-22     4
2018-11-23     8
2018-11-24    12
2018-11-25    16
2018-11-26 20 Freq: D, Name: A, dtype: int32 >>> print(df['A']) 2018-11-21 0 2018-11-22 4 2018-11-23 8 2018-11-24 12 2018-11-25 16 2018-11-26 20 Freq: D, Name: A, dtype: int32

選擇跨越多行或多列:

>>> print(df[0:3])
            A  B   C   D
2018-11-21  0  1   2   3
2018-11-22
4 5 6 7 2018-11-23 8 9 10 11 >>> print(df['20181121':'20181123']) A B C D 2018-11-21 0 1 2 3 2018-11-22 4 5 6 7 2018-11-23 8 9 10 11

如果df[3:3]將會是一個空物件。print(df['20181121':'20181123']):選擇2018112120181123標籤之間的資料,並且包括這兩個標籤。

二、根據標籤 loc

同樣我們可以使用標籤來選擇資料 loc, 本例子主要通過標籤名字選擇某一行資料, 或者通過選擇某行或者所有行(:代表所有行)然後選其中某一列或幾列資料。:

>>> print(df.loc['20181122'])
A    4
B    5
C    6
D    7
Name: 2018-11-22 00:00:00, dtype: int32
>>> print(df.loc[:,['A','B']])
             A   B
2018-11-21   0   1
2018-11-22   4   5
2018-11-23   8   9
2018-11-24  12  13
2018-11-25  16  17
2018-11-26  20  21
>>> print(df.loc['20181122',['A','B']])
A    4
B    5
Name: 2018-11-22 00:00:00, dtype: int32

三、根據序列 iloc

另外我們可以採用位置進行選擇iloc, 在這裡我們可以通過位置選擇在不同情況下所需要的資料例如選某一個,連續選或者跨行選等操作。

>>> print(df)
             A   B   C   D
2018-11-21   0   1   2   3
2018-11-22   4   5   6   7
2018-11-23   8   9  10  11
2018-11-24  12  13  14  15
2018-11-25  16  17  18  19
2018-11-26  20  21  22  23
>>> print(df.iloc[3,1])
13
>>> print(df.iloc[3:5,1:3])
             B   C
2018-11-24  13  14
2018-11-25  17  18
>>> print(df.iloc[[1,3,5],1:3])
             B   C
2018-11-22   5   6
2018-11-24  13  14
2018-11-26  21  22

在這裡我們可以通過位置選擇在不同情況下所需要的資料, 例如選某一個,連續選或者跨行選等操作。

四、根據混合的這兩種 ix

當然我們可以採用混合選擇 ix, 其中選擇’A’’C’的兩列,並選擇前三行的資料。

>>> print(df.ix[:3,['A','C']])
            A   C
2018-11-21  0   2
2018-11-22  4   6
2018-11-23  8  10

五、通過判斷的篩選

最後我們可以採用判斷指令 (Boolean indexing) 進行選擇. 我們可以約束某項條件然後選擇出當前所有資料.

>>> print(df[df.A>8])
             A   B   C   D
2018-11-24  12  13  14  15
2018-11-25  16  17  18  19
2018-11-26  20  21  22  23

下節我們將會講到Pandas中如何設定值。