import pandas as pd
# 假设有 5 个人,分别参加了 4 门课程,获得了对应的分数
data = {'name' : pd.Series(['Alice', 'Bob', 'Cathy', 'Dany', 'Ella']),
'Math_A' : pd.Series([1.1, 2.2, 3.3, 4.4, 5]),
'English_A' : pd.Series([3, 2.6, 2, 1.7, 3]),
'Math_B' : pd.Series([1.7, 2.5, 3.6, 2.4, 5]),
'English_B' : pd.Series([5, 2.6, 2.4, 1.3, 3]),
}
df = pd.DataFrame(data)
print(df)
** 运行结果:**
name Math_A English_A Math_B English_B
0 Alice 1.1 3.0 1.7 5.0
1 Bob 2.2 2.6 2.5 2.6
2 Cathy 3.3 2.0 3.6 2.4
3 Dany 4.4 1.7 2.4 1.3
4 Ella 5.0 3.0 5.0 3.0
print(df[['name', 'Math_A', 'Math_B']])
# 注意这里是 双重 []
运行结果:
name Math_A Math_B
0 Alice 1.1 1.7
1 Bob 2.2 2.5
2 Cathy 3.3 3.6
3 Dany 4.4 2.4
4 Ella 5.0 5.0
print(df['name'])
# 注意这里就是 单 []
print(df.name)
运行结果:
0 Alice
1 Bob
2 Cathy
3 Dany
4 Ella
Name: name, dtype: object
0 Alice
1 Bob
2 Cathy
3 Dany
4 Ella
Name: name, dtype: object
print(df.filter(regex='B$'))
# 选择以 'B' 为结尾的 label
运行结果:
Math_B English_B
0 1.7 5.0
1 2.5 2.6
2 3.6 2.4
3 2.4 1.3
4 5.0 3.0
print(df.loc[:2,'English_A':'English_B'])
# 注意,这里的切片 与 Python 本身的不同,包含了结尾!
# 所以这个例子中包含了 第 2 行 和 'English_B' 列
运行结果:
English_A Math_B English_B
0 3.0 1.7 5.0
1 2.6 2.5 2.6
2 2.0 3.6 2.4
print(df.iloc[:2 , [0,3]])
# 注意,这里的切片没有包含第 2 行!同时选择了 第 0 列 和 第 3 列
# 如果想要 同时选择 0~3 列(共4列),要使用 :4
运行结果:
name Math_B
0 Alice 1.7
1 Bob 2.5
print(df.loc[df['English_A'] > 2, ['name', 'English_A']])
# 这里我希望查看 'English_A' 这个科目分数 2 分以上有哪些人
运行结果:
name English_A
0 Alice 3.0
1 Bob 2.6
4 Ella 3.0