Pandas 选择是指从 DataFrame 中提取特定数据片段的过程。
数据选择涉及根据标签、位置或条件选择特定的行和列。
Pandas 提供了多种方法,例如基本索引、切片、布尔索引和查询,可以高效地提取、过滤和转换数据,使用户能够专注于相关信息以进行分析和决策。
使用索引和切片选择数据
在 Pandas 中,我们可以使用方括号及其标签或位置来选择所需数据。
让我们看一个例子。
import pandas as pd
# create a DataFrame
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'Age': [25, 30, 22, 27, 29],
'Salary': [50000, 60000, 45000, 55000, 52000]
}
df = pd.DataFrame(data)
# selecting a single column
name_column = df['Name']
print("Selecting single column: Name")
print(name_column)
print()
# selecting multiple columns
age_salary_columns = df[['Age', 'Salary']]
print("Selecting multiple columns: Age and Salary")
print(age_salary_columns.to_string(index=False))
print()
# selecting rows using slicing
selected_rows = df[1:4]
print("Selecting rows 1 to 3")
print(selected_rows.to_string(index=False))
print()
输出
Selecting single column: Name 0 Alice 1 Bob 2 Charlie 3 David 4 Eve Name: Name, dtype: object Selecting multiple columns: Age and Salary Age Salary 25 50000 30 60000 22 45000 27 55000 29 52000 Selecting rows 1 to 3 Name Age Salary Bob 30 60000 Charlie 22 45000 David 27 55000
在上面的示例中,我们创建了一个名为 df 的 DataFrame,它使用包含三列的字典数据:Name
、Age
和 Salary
。每一列都由一个值列表表示。
然后我们,
- 使用
df['Name']
选择单列Name
- 使用
df[['Age', 'Salary']]
选择多列Age
和Salary
- 使用切片
df[1:4]
选择从 **1** 到 **3** 的行
注意:.to_string(index=False)
用于显示不带索引的值。
使用 loc 和 iloc 选择数据
Pandas 中的 loc
和 iloc
方法用于通过标签或整数索引访问数据。
loc
选择具有特定标签的行和列iloc
选择特定索引的行和列
我们来看一个例子。
import pandas as pd
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Emily'],
'Age': [25, 30, 22, 27, 29],
'City': ['New York', 'Los Angeles', 'Chicago', 'Houston', 'San Francisco']
}
df = pd.DataFrame(data)
print(f"Original DataFrame \n {df} \n")
# loc to select rows and columns by labels
# select rows 1 to 3 and columns Name and Age
selected_data_loc = df.loc[1:3, ['Name', 'Age']]
print(selected_data_loc.to_string(index = False))
print()
# iloc to select rows and columns by index
# select rows 1 to 3 and columns 0 and 2
selected_data_iloc = df.iloc[1:4, [0, 2]]
print(selected_data_iloc.to_string(index = False))
输出
Original DataFrame Name Age City 0 Alice 25 New York 1 Bob 30 Los Angeles 2 Charlie 22 Chicago 3 David 27 Houston 4 Emily 29 San Francisco Name Age Bob 30 Charlie 22 David 27 Name City Bob Los Angeles Charlie Chicago David Houston
这里,
- 使用
df.loc[1:3, ['Name', 'Age']]
- 从df
中选择行 **1** 到 **3** 以及列Name
和Age
- 使用
df.iloc[1:4, [0, 2]]
- 从df
中选择行 **1** 到 **3** 以及索引位置为 **0** 和 **2** 的列
根据特定条件选择行
在 Pandas 中,我们可以使用布尔条件根据特定标准过滤行。例如,
import pandas as pd
# creating a DataFrame
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Emily'],
'Age': [25, 30, 22, 28, 24],
'Gender': ['Female', 'Male', 'Male', 'Male', 'Female']
}
df = pd.DataFrame(data)
# select rows where Age is greater than 25
selected_rows = df[df['Age'] > 25]
print(selected_rows)
输出
Name Age Gender 1 Bob 30 Male 3 David 28 Male
在此示例中,我们选择了年龄大于 **25** 的行。
布尔索引是通过条件完成的
df['Age'] > 25
这将创建一个布尔掩码。当将此掩码应用于 DataFrame 时,它只选择条件为 True
的行。
使用 query() 选择数据
Pandas 中的 query()
方法允许您使用更类似 SQL 的语法来选择数据。
我们来看一个例子。
import pandas as pd
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
'Age': [25, 30, 22, 28, 35],
'Score': [85, 90, 75, 80, 95]
}
df = pd.DataFrame(data)
# select the rows where the age is greater than 25
selected_rows = df.query('Age > 25')
print(selected_rows.to_string(index = False))
输出
Name Age Score Bob 30 90 David 28 80 Eva 35 95
在此示例中,查询 Age > 25
选择 Age
列值大于 **25** 的行。
根据值列表选择行
Pandas 为我们提供了名为 isin()
的方法,可以根据值列表过滤行。例如,
import pandas as pd
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Emily'],
'Age': [25, 30, 22, 28, 24]
}
df = pd.DataFrame(data)
# create a list of names to select
names_to_filter = ['Bob', 'David']
# use isin() to select rows based on the 'Name' column
selected_rows = df[df['Name'].isin(names_to_filter)]
print(selected_rows.to_string(index = False))
输出
Name Age Bob 30 David 28
在此示例中,我们只想选择姓名是 Bob
或 David
的行。
我们创建了一个名为 names_to_filter
的列表,其中包含我们要过滤的姓名,然后使用 isin()
方法根据 Name
列中的值过滤行。