Pandas 根据另一列提取数据
在数据分析过程中,有时需要根据一列的值来筛选出另一列的值,Pandas中可以使用多种方法实现这一需求。本文将介绍两种基础的方法:使用.loc索引和使用[ ]操作符。
阅读更多:Pandas 教程
1. 使用.loc索引
使用.loc方法可以通过行和列的标签定位数据,语法如下:
df.loc[row_indexer, column_indexer]
其中,row_indexer称作row selector,用于定位行,column_indexer称作column selector,用于定位列。我们需要将row selector设置为布尔值索引,来筛选出符合条件的行,然后使用column selector选取需要的列。具体实现如下:
import pandas as pd
df = pd.DataFrame({
'name': ['Alice', 'Bob', 'Charlie'],
'age': [25, 32, 18],
'gender': ['female', 'male', 'male']
})
# 使用.loc方法筛选数据
df.loc[df['gender'] == 'male', 'name']
这里我们创建了一个包含name、age和gender三列的DataFrame,然后通过.loc方法选取了所有gender等于’male’的行,并选取了对应的name列。输出如下:
1 Bob
2 Charlie
Name: name, dtype: object
2. 使用[ ]操作符
除了使用.loc方法外,还可以直接使用[ ]操作符实现同样的功能。语法如下:
df[column_name][row_selector]
其中,column_name为需要选取的列名,row_selector为布尔值索引,用于筛选行。具体实现代码如下:
import pandas as pd
df = pd.DataFrame({
'name': ['Alice', 'Bob', 'Charlie'],
'age': [25, 32, 18],
'gender': ['female', 'male', 'male']
})
# 使用[ ]操作符筛选数据
df['name'][df['gender'] == 'male']
输出结果和上一种方法相同。
3. 示例
我们使用了如下数据集作为示例:
student_id | name | gender | score |
---|---|---|---|
1001 | Alice | Female | 89 |
1002 | Bob | Male | 78 |
1003 | Charlie | Male | 85 |
1004 | David | Male | 90 |
1005 | Emily | Female | 92 |
1006 | Frank | Male | 87 |
以下是一些常见的筛选操作,可以根据具体的需求进行调整。
3.1 筛选特定列的数据
我们要选择所有学生的姓名和分数,可以使用.loc方法或[ ]操作符实现:
import pandas as pd
df = pd.read_csv('students.csv')
# 使用.loc方法选取特定列
df.loc[:, ['name', 'score']]
# 或者使用[ ]操作符选取特定列
df[['name', 'score']]
输出结果如下:
name score
0 Alice 89
1 Bob 78
2 Charlie 85
3 David 90
4 Emily 92
5 Frank 87
3.2 筛选符合特定条件的数据
我们要选择所有男生的数据,可以使用布尔值索引实现:
import pandas as pd
df = pd.read_csv('students.csv')
# 选择全部男生的数据
df[df['gender'] == 'Male']
输出结果如下:
student_id name gender score
1 1002 Bob Male 78
2 1003 Charlie Male 85
3 1004 David Male 90
5 1006 Frank Male 87
3.3 筛选符合多个条件的数据
我们要选择所有女生且成绩大于90分的数据,可以进行如下操作:
import pandas as pd
df = pd.read_csv('students.csv')
# 选择所有女生且成绩大于90分的数据
df[(df['gender'] == 'Female') & (df['score'] > 90)]
输出结果如下:
student_id name gender score
4 1005 Emily Female 92
3.4 根据条件将数据进行分组并计算平均值
我们要按照性别对学生的成绩进行分组并计算平均值,可以使用.groupby方法实现:
import pandas as pd
df = pd.read_csv('students.csv')
# 按照性别计算平均成绩
df.groupby('gender')['score'].mean()
输出结果如下:
gender
Female 90.5
Male 85.0
Name: score, dtype: float64
总结
本文介绍了Pandas中根据一列的值来筛选另一列的值的两种方法:使用.loc索引和使用[ ]操作符。同时,提供了一些具体的示例代码,希望能助您在数据分析过程中提高效率。