1.普通方法筛选
我们首先构造了一个 5X4 的矩阵数据。
import pandas as pd
import numpy as np
dates = pd.date_range('20200315', periods = 5)
df = pd.DataFrame(np.arange(20).reshape(5,4), index = dates, columns = ['A', 'B','C','D'])
print(df)
#输出
A B C D
2020-03-15 0 1 2 3
2020-03-16 4 5 6 7
2020-03-17 8 9 10 11
2020-03-18 12 13 14 15
2020-03-19 16 17 18 19
如果我们想选取DataFrame中的数据,下面描述了两种途径, 他们都能达到同一个目的:
print(df['A'])
#输出
2020-03-15 0
2020-03-16 4
2020-03-17 8
2020-03-18 12
2020-03-19 16
Freq: D, Name: A, dtype: int64
print(df.A)
#输出
2020-03-15 0
2020-03-16 4
2020-03-17 8
2020-03-18 12
2020-03-19 16
Freq: D, Name: A, dtype: int64
让选择跨越多行或多列:
print(df[0:3])
#输出
A B C D
2020-03-15 0 1 2 3
2020-03-16 4 5 6 7
2020-03-17 8 9 10 11
print(df['20200315' : '20200317'])
#输出
A B C D
2020-03-15 0 1 2 3
2020-03-16 4 5 6 7
2020-03-17 8 9 10 11
2.loc(纯标签筛选)
同样我们可以使用标签来选择数据 loc, 本例子主要通过标签名字选择某一行数据, 或者通过选择某行或者所有行(:代表所有行)然后选其中某一列或几列数据。
import pandas as pd
import numpy as np
dates = pd.date_range('20200315', periods = 5)
df = pd.DataFrame(np.arange(20).reshape(5,4), index = dates, columns = ['A', 'B','C','D'])
print(df)
print('\n')
print(df.loc['20200315']) #打印某一行的标签
print('\n')
print(df.loc[:,['A', 'B']]) #打印A、B属性的所有行
print('\n')
print(df.loc['20200315', ['A', 'B','C']])
#输出
A B C D
2020-03-15 0 1 2 3
2020-03-16 4 5 6 7
2020-03-17 8 9 10 11
2020-03-18 12 13 14 15
2020-03-19 16 17 18 19
A 0
B 1
C 2
D 3
Name: 2020-03-15 00:00:00, dtype: int64
A B
2020-03-15 0 1
2020-03-16 4 5
2020-03-17 8 9
2020-03-18 12 13
2020-03-19 16 17
A 0
B 1
C 2
Name: 2020-03-15 00:00:00, dtype: int64
3. iloc(纯数字筛选)
另外我们可以采用位置进行选择 iloc, 在这里我们可以通过位置选择在不同情况下所需要的数据例如选某一个,连续选或者跨行选等操作。
import pandas as pd
import numpy as np
dates = pd.date_range('20200315', periods = 5)
df = pd.DataFrame(np.arange(20).reshape(5,4), index = dates, columns = ['A', 'B','C','D'])
print(df)
print('\n')
print(df.iloc[3,1])
print('\n')
print(df.iloc[1:2,1:3])
print('\n')
print(df.iloc[[1,3,4],1:3])
#输出
import pandas as pd
import numpy as np
dates = pd.date_range('20200315', periods = 5)
df = pd.DataFrame(np.arange(20).reshape(5,4), index = dates, columns = ['A', 'B','C','D'])
print(df)
print('\n')
print(df.iloc[3,1])
print('\n')
print(df.iloc[1:2,1:3])
print('\n')
print(df.iloc[[1,3,4],1:3])
import pandas as pd
import numpy as np
dates = pd.date_range('20200315', periods = 5)
df = pd.DataFrame(np.arange(20).reshape(5,4), index = dates, columns = ['A', 'B','C','D'])
print(df)
print('\n')
print(df.iloc[3,1])
print('\n')
print(df.iloc[1:2,1:3])
print('\n')
print(df.iloc[[1,3,4],1:3])
A B C D
2020-03-15 0 1 2 3
2020-03-16 4 5 6 7
2020-03-17 8 9 10 11
2020-03-18 12 13 14 15
2020-03-19 16 17 18 19
13
B C
2020-03-16 5 6
B C
2020-03-16 5 6
2020-03-18 13 14
2020-03-19 17 18
4.ix(标签与数字的混合筛选)
当然我们可以采用混合选择 ix, 其中选择’A’和’C’的两列,并选择前三行的数据。
print(df.ix[:3, ['A', 'C']])
#输出
A C
2020-03-15 0 2
2020-03-16 4 6
2020-03-17 8 10
5.判断条件筛选
最后我们可以采用判断指令 (Boolean indexing) 进行选择. 我们可以约束某项条件然后选择出当前所有数据.
print(df[df.C < 14])
#输出
A B C D
2020-03-15 0 1 2 3
2020-03-16 4 5 6 7
2020-03-17 8 9 10 11