数据选择
6 数据选择
在进行单次分析前,我们要选择好研究的数据对象。如某列,某行,某个数据等…
6.1 列选择
6.1.1 选择某一列或某几列
Excel
选择某一列——>直接选中某一列
选择某几列——>选中一列,摁住Ctrl
不放,再选其他列
Python
普通索引
df[列名]
df[[列名1,列名2,···]]
- 选中单列,返回
Series
对象 - 选中多列,返回
DataFrame
对象
如:
df = pd.DataFrame({
"姓名": ["张三", "李四", "王五", "赵六"],
"语文": [110, 92, 98, 121],
"数学": [120, 130, 111, 90],
"英语": [88, 91, 110, 113]
})
names=df["姓名"]
print(type(names))
# <class 'pandas.core.series.Series'>
print(names)
"""
0 张三
1 李四
2 王五
3 赵六
Name: 姓名, dtype: object
"""
grades=df[["语文","数学","英语"]]
print(type(grades))
# <class 'pandas.core.frame.DataFrame'>
print(grades)
"""
语文 数学 英语
0 110 120 88
1 92 130 91
2 98 111 110
3 121 90 113
"""
位置索引
df.iloc[:,n]
df.iloc[:,[n1,n2,···]]
,
前代表哪几行,,
后代表哪几列:
代表所有行- 位置从0开始计数
如:
names=df.iloc[:,0]
print(names)
"""
0 张三
1 李四
2 王五
3 赵六
Name: 姓名, dtype: object
"""
grades=df.iloc[:,[1,2,3]]
print(grades)
"""
语文 数学 英语
0 110 120 88
1 92 130 91
2 98 111 110
3 121 90 113
"""
6.1.2 选择连续的某几列(切片索引)
Excel
拖动选择即可
Python
同样有普通索引和位置索引两种方式。
但位置索引较为简单。
df.iloc[:,n1:n2]
n1:n2
代表选中第n1列到第n2列(从0计数,包含n1,不包含n2)- 这种区间的形式称为切片索引
如:
grades=df.iloc[:,1:4]
print(grades)
"""
语文 数学 英语
0 110 120 88
1 92 130 91
2 98 111 110
3 121 90 113
"""
6.2 行选择
6.2.1 选择某一行或某几行
Excel
同列,Ctrl
多选
Python
普通索引
df.loc[行名]
df.loc[[行名1,行名2,···]]
- 选中单行,返回
Series
对象 - 选中多行,返回
DataFrame
对象
如:
df.set_index("姓名",inplace=True) # 设置"姓名"列为行索引
student1=df.loc["张三"]
print(student1)
"""
语文 110
数学 120
英语 88
Name: 张三, dtype: int64
"""
students=df.loc[["李四","王五"]]
print(students)
"""
语文 数学 英语
姓名
李四 92 130 91
王五 98 111 110
"""
位置索引
df.iloc[r] # df.iloc[r,:]
df.iloc[[r1,r2,···]] # df.iloc[[r1,r2,···],:]
- 位置r从0开始计数
如:
student1=df.iloc[0]
print(student1)
"""
语文 110
数学 120
英语 88
Name: 张三, dtype: int64
"""
students=df.iloc[[1,2]]
print(students)
"""
语文 数学 英语
姓名
李四 92 130 91
王五 98 111 110
"""
6.2.2 选择连续的几行(切片索引)
Excel
同列,拖动即可
Python
同样有普通索引和位置索引两种方式。
但位置索引较为简单(切片索引)。
df.iloc[r1:r2] # df.iloc[r1:r2,:]
r1:r2
代表选中第r1行到第r2行(从0计数,包含r1,不包含r2)
如:
students=df.iloc[1:4]
print(students)
"""
语文 数学 英语
姓名
李四 92 130 91
王五 98 111 110
赵六 121 90 113
"""
6.2.3 筛选满足条件的行(布尔索引)
Excel
“数据”>“排序和筛选”>“筛选”
点击某列的筛选图标>“数字筛选”,选择对应条件
可以进行逻辑运算"与",“或”
Python
df[条件]
df[(条件1) 逻辑运算符 (条件2)]
- 逻辑运算符有
&
(与),|
(或),~
(非)
如:
result1=df[df["语文"]>100] # 语文成绩大于100
print(result1)
"""
语文 数学 英语
姓名
张三 110 120 88
赵六 121 90 113
"""
result2=df[(df["语文"]>90) & (df["数学"]>90) & df["英语"]>90] #三门成绩都大于90
print(result2)
"""
语文 数学 英语
姓名
李四 92 130 91
王五 98 111 110
"""
6.3 区域选择
Excel
拖动选择或Ctrl
多选
Python
区域选择,就是选定行和列,取交汇区域。
可以直接行列索引一起进行。也可以先行索引得到一个新的对象,再对新的对象进行列索引。
普通索引,位置索引(包括切片索引),布尔索引(一般用于行)可以自行组合
以下为常见的
6.3.1 普通索引+普通索引
df.loc[[行名1,行名2,···],[列名1,列名2,···]]
如:
area1=df.loc[["张三","李四"],["数学","英语"]]
print(area1)
"""
数学 英语
姓名
张三 120 88
李四 130 91
"""
6.3.2 位置索引+位置索引
df.iloc[[r1,r2,···],[n1,n2,···]] # 第r1,r2,···行和第n1,n2···列交汇区域
df.iloc[r1:r2,n1:n2] #第r1行到r2行(包含r1,不包含r2)和第n1列到n2列(包含n1,不包含n2)交汇区域
如:
area2=df.iloc[[0,2,3],[0,2]]
print(area2)
"""
语文 英语
姓名
张三 110 88
王五 98 110
赵六 121 113
"""
area3=df.iloc[1:3,0:3]
print(area3)
"""
语文 数学 英语
姓名
李四 92 130 91
王五 98 111 110
"""
6.3.3 布尔索引(行)+普通索引(列)
df[条件索引][[列名1,列名2,···]]
- 实际上是对
df[条件索引]
返回的DataFrame
对象再进行一次列的普通索引
如:
area4=df[df["语文"]>100][["数学","英语"]]
print(area4)
"""
数学 英语
姓名
张三 120 88
赵六 90 113
"""