Python – 如何选择Pandas DataFrame的一个子集
Pandas是Python数据科学领域使用较为广泛的库之一。它提供了高性能的数据结构和数据分析工具,其中DataFrame是其中相对常用的一种。DataFrame是一个二维结构,类似于Excel表格,而Pandas提供的选择子集的方法可以帮助我们快速地获取所需的数据。
选择列
我们可以使用列名来选择DataFrame中的列,有两种方法:
- 使用[]操作符
- 使用.操作符
通过[]操作符来选择列
import pandas as pd
# 创建DataFrame
df = pd.DataFrame({'Name': ['Alice', 'Bob', 'Charlie'], 'Age': [25, 23, 30], 'Salary': [50000, 60000, 70000]})
# 选择Name列
name_col1 = df['Name']
name_col2 = df.loc[:, 'Name']
name_col3 = df.iloc[:, 0]
print(name_col1)
print(name_col2)
print(name_col3)
输出:
0 Alice
1 Bob
2 Charlie
Name: Name, dtype: object
0 Alice
1 Bob
2 Charlie
Name: Name, dtype: object
0 Alice
1 Bob
2 Charlie
Name: Name, dtype: object
使用[]操作符可以选择单个列或多个列。例如,我们可以通过以下方式选择Salary和Name列:
import pandas as pd
# 创建DataFrame
df = pd.DataFrame({'Name': ['Alice', 'Bob', 'Charlie'], 'Age': [25, 23, 30], 'Salary': [50000, 60000, 70000]})
# 选择Salary和Name列
name_salary = df[['Salary', 'Name']]
print(name_salary)
输出:
Salary Name
0 50000 Alice
1 60000 Bob
2 70000 Charlie
通过.操作符来选择列
import pandas as pd
# 创建DataFrame
df = pd.DataFrame({'First Name': ['Alice', 'Bob', 'Charlie'], 'Age': [25, 23, 30], 'Salary': [50000, 60000, 70000]})
# 选择First Name列
first_name_col = df['First Name']
first_name_col_2 = df.loc[:, 'First Name']
first_name_col_3 = df.iloc[:, 0]
first_name_col_4 = df.First Name
print(first_name_col)
print(first_name_col_2)
print(first_name_col_3)
print(first_name_col_4)
输出:
0 Alice
1 Bob
2 Charlie
Name: First Name, dtype: object
0 Alice
1 Bob
2 Charlie
Name: First Name, dtype: object
0 Alice
1 Bob
2 Charlie
Name: First Name, dtype: object
0 Alice
1 Bob
2 Charlie
Name: First Name, dtype: object
可以看出,使用.操作符选择列时,列名中包含空格时需要使用另一种方法。我们可以通过两种方法选择Salary列:
import pandas as pd
# 创建DataFrame
df = pd.DataFrame({'First Name': ['Alice', 'Bob', 'Charlie'], 'Age': [25, 23, 30], 'Salary': [50000, 60000, 70000]})
# 选择Salary列
salary_col = df.Salary
salary_col_2 = df.loc[:, 'Salary']
print(salary_col)
print(salary_col_2)
输出:
0 50000
1 60000
2 70000
Name: Salary, dtype: int64
0 50000
1 60000
2 70000
Name: Salary, dtype: int64
选择行
我们可以通过以下方式选择行:
- 使用行号来选择行
- 使用条件过滤来选择行
- 使用.loc[]和.iloc[]选择行
使用行号来选择行
使用行号来选择行非常简单,只需传入行号即可。例如,我们可以选择第二行:
import pandas as pd
# 创建DataFrame
df = pd.DataFrame({'Name': ['Alice', 'Bob', 'Charlie'], 'Age': [25, 23, 30], 'Salary': [50000, 60000, 70000]})
# 选择第二行
row_2 = df.iloc[1]
print(row_2)
输出:
Name Bob
Age 23
Salary 60000
Name: 1, dtype: object
如果需要选择多行,则可以使用切片操作:
import pandas as pd
# 创建DataFrame
df = pd.DataFrame({'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eric'], 'Age': [25, 23, 30, 28, 35], 'Salary': [50000, 60000, 70000, 85000, 90000]})
# 选择第二到第四行
row_2_to_4 = df.iloc[1:4]
print(row_2_to_4)
输出:
Name Age Salary
1 Bob 23 60000
2 Charlie 30 70000
3 David 28 85000
使用条件过滤来选择行
使用条件过滤来选择行非常实用。例如,我们可以选择所有年龄大于25岁的行:
import pandas as pd
# 创建DataFrame
df = pd.DataFrame({'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eric'], 'Age': [25, 23, 30, 28, 35], 'Salary': [50000, 60000, 70000, 85000, 90000]})
# 选择年龄大于25岁的行
greater_than_25 = df[df.Age > 25]
print(greater_than_25)
输出:
Name Age Salary
2 Charlie 30 70000
3 David 28 85000
4 Eric 35 90000
使用.loc[]和.iloc[]选择行
使用.loc[]和.iloc[]可以根据行标签或行号来选择行。例如,我们可以选择第一行和第三行:
import pandas as pd
# 创建DataFrame
df = pd.DataFrame({'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eric'], 'Age': [25, 23, 30, 28, 35], 'Salary': [50000, 60000, 70000, 85000, 90000]})
# 选择第一行和第三行
row_1_3 = df.loc[[0, 2]]
print(row_1_3)
输出:
Name Age Salary
0 Alice 25 50000
2 Charlie 30 70000
选择子集
我们可以通过在[]操作符中使用多个条件来选择子集。
例如,我们可以选择所有年龄在25到30岁之间、薪水在50000到80000之间的人:
import pandas as pd
# 创建DataFrame
df = pd.DataFrame({'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eric'], 'Age': [25, 23, 30, 28, 35], 'Salary': [50000, 60000, 70000, 85000, 90000]})
# 选择所有年龄在25到30岁之间、薪水在50000到80000之间的人
subset = df[(df.Age >= 25) & (df.Age <= 30) & (df.Salary >= 50000) & (df.Salary <= 80000)]
print(subset)
输出:
Name Age Salary
0 Alice 25 50000
2 Charlie 30 70000
我们也可以使用.loc[]和.iloc[]选择子集。例如,我们可以选择所有年龄在25到30岁之间、薪水在50000到80000之间、名字以’A’开头的人:
import pandas as pd
# 创建DataFrame
df = pd.DataFrame({'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eric', 'Aaron'], 'Age': [25, 23, 30, 28, 35, 29], 'Salary': [50000, 60000, 70000, 85000, 90000, 55000]})
# 选择所有年龄在25到30岁之间、薪水在50000到80000之间、名字以'A'开头的人
subset = df.loc[(df.Age >= 25) & (df.Age <= 30) & (df.Salary >= 50000) & (df.Salary <= 80000) & (df.Name.str.startswith('A'))]
print(subset)
输出:
Name Age Salary
0 Alice 25 50000
结论
通过本文,我们学习了如何选择DataFrame中的列、行和子集,包括使用操作符、条件过滤和.loc[]/.iloc[]方法。掌握这些方法可以帮助我们在数据分析和预处理过程中快速选择所需数据。