一、简介
我们在这里简单介绍了创建Series、DataFrame的几种方式,本文主要介绍如何查找数据。
由于Series数据结构较为简单,因此先主要介绍DataFrame数据结构的查找数据。
二、按列查找数据
先介绍按列查找数据的方法。
2.1 查找一整列的数据
2.1.1 df[‘列名’]
先创建一个DataFrame
data = {
'name': ['apolo', 'adm', 'bolon', 'cathy'],
'age': [18, 29, 32, 28],
'sex': ['male', 'female', 'male', 'male']}
df = pd.DataFrame(data)
df
输出:
name age sex
0 apolo 18 male
1 adm 29 female
2 bolon 32 male
3 cathy 28 male
知道要查找的列的列名的话,可以直接按照df[‘列名’]的方式直接查找:
df['age']
输出:返回的是一个Series对象,可以利用Series的属性或方法进行后续的操作
0 18
1 29
2 32
3 28
Name: age, dtype: int64
查找多列的话,也可以用类似的方法——df[[‘列名1’, ‘列名2’, ……]],但要注意不能用df[‘列名1’, ‘列名2’, ……],否则会报错。
df[['age', 'sex']]
输出:此时输出的是一个DataFrame对象
age sex
0 18 male
1 29 female
2 32 male
3 28 male
2.1.2 df.loc[:, ‘列名’]
其实这种方法更适合查找一列中的部分数据,即对行切片。
df.loc[:, 'age']
输出:是一个Series对象
0 18
1 29
2 32
3 28
Name: age, dtype: int64
同样,这种方法也可以同时查找多列——df.loc[:, [‘列名1’, ‘列名2’, ……]]
df.loc[:, ['age', 'sex']]
输出:
age sex
0 18 male
1 29 female
2 32 male
3 28 male
2.1.3 df.iloc[:, 列的位置]
这种方法和df.loc[:, ‘列名’]类似,区别在于这种方法需要传入要查找的列的位置,而不是列名。
df.iloc[:, 2]
输出:
0 male
1 female
2 male
3 male
Name: sex, dtype: object
同样,这种方法也可以同时查找多列——df.loc[:, [‘列的位置1’, ‘列的位置2’, ……]]
df.iloc[:, [0, 2]]
输出:
name sex
0 apolo male
1 adm female
2 bolon male
3 cathy male
2.2 查找一列的部分数据
2.2.1 df.loc[‘起始索引名’:‘终点索引名’, ‘列名’]
先创建一个DataFrame
data = {
'name': ['apolo', 'adm', 'bolon', 'cathy', 'devn', 'elov'],
'age': [18, 29, 32, 28, 34, 19],
'sex': ['male', 'female', 'male', 'male', 'male', 'female']}
df = pd.DataFrame(data, index=['a', 'b', 'c', 'd', 'e','f'])
df
输出:
name age sex
a apolo 18 male
b adm 29 female
c bolon 32 male
d cathy 28 male
e devn 34 male
f elov 19 female
和查询整列的语法类似。
df.loc['a':'c', 'sex']
输出:需要注意的是,'a':'c'
不能换为'c:'a'
,否则结果是空的,同样,也可以同时查询多列的部分,只需将'sex'
换为['sex', 'age']
即可。
a male
b female
c male
Name: sex, dtype: object
2.2.2 df.iloc[‘起始索引位置’:‘终点索引位置’, ‘列的位置’]
和查询整列的方法类似。
df.iloc[2:5, 1]
输出:同样,也不能调换起始索引和终点索引的位置,否则结果是空的。而要查询多列,也只需将1
换为[0, 1]
即可。
c 32
d 28
e 34
Name: age, dtype: int64
三、按行查找数据
和查询列的方法类似,主要就是用df.loc[]
和df.iloc[]
3.1 查找整行数据
3.1.1 df[‘索引名’]
和查询整列的方法类似,但只传入待查找的行的索引名即可。
df.loc['c']
输出:此时输出的对象是一个Series对象,其索引为原df的列名。
name bolon
age 32
sex male
Name: c, dtype: object
查找多行的语法类似,只需传入索引名组成的列表即可。
df.loc[['c', 'a']]
输出:最后输出的行的顺序和传入的列表中索引名的顺序一致。
name age sex
c bolon 32 male
a apolo 18 male
3.1.2 df[‘索引名’]
和查询整列的方法类似,但只传入待查找的行的索引的位置即可。
df.iloc[3]
输出:此时输出的对象是一个Series对象,其索引为原df的列名。
name cathy
age 28
sex male
Name: d, dtype: object
查找多行的语法类似,只需传入索引的位置组成的列表即可。
df.iloc[[5, 2]]
输出:最后输出的行的顺序和传入的列表中索引的位置的顺序一致。
name age sex
f elov 19 female
c bolon 32 male
3.2 查找行的部分数据
和查找整行的数据类似。
3.2.1 df.loc[‘索引名’, ‘起始列名’:‘终点列名’]
df.loc['c', 'name':'age']
输出:同样要注意,列名的顺序不能写反,否则会得到空结果。要想查找多个行的部分数据,也只需传入索引名组成的列表即可。
name bolon
age 32
Name: c, dtype: object
3.2.2 df.iloc[索引位置, 起始列位置:终点列位置]
df.iloc[4, 1:3]
输出:同样要注意,列的位置的顺序不能写反,否则会得到空结果。要想查找多个行的部分数据,也只需传入索引的位置组成的列表即可。
age 34
sex male
Name: e, dtype: object