如何使用 pandas 的 loc 方法结合两个条件来筛选数据
参考:pandas dataframe loc 2 conditions
在数据分析中,经常需要根据多个条件筛选数据。Pandas 是 Python 数据分析的重要工具,其 DataFrame 提供了强大的数据操作能力。本文将详细介绍如何使用 pandas 的 loc
方法结合两个条件来筛选数据。
1. 理解 loc
方法
在 pandas 中,loc
方法用于按标签索引数据。其基本语法是 df.loc[行标签, 列标签]
。当我们需要根据条件筛选数据时,可以将条件表达式放在行标签的位置。
2. 基本示例
首先,我们创建一个简单的 DataFrame 来演示如何使用 loc
方法。
import pandas as pd
# 创建一个简单的 DataFrame
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'Age': [24, 27, 22, 32, 29],
'City': ['New York', 'Los Angeles', 'New York', 'Chicago', 'Los Angeles']
}
df = pd.DataFrame(data)
print(df)
Output:
示例代码 1:单条件筛选
import pandas as pd
# 创建一个简单的 DataFrame
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'Age': [24, 27, 22, 32, 29],
'City': ['New York', 'Los Angeles', 'New York', 'Chicago', 'Los Angeles']
}
df = pd.DataFrame(data)
# 筛选年龄大于 25 的记录
result = df.loc[df['Age'] > 25]
print(result)
Output:
示例代码 2:两个条件的筛选
接下来,我们将根据两个条件筛选数据。我们可以使用 &
(与)和 |
(或)来组合条件。
import pandas as pd
# 创建一个简单的 DataFrame
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'Age': [24, 27, 22, 32, 29],
'City': ['New York', 'Los Angeles', 'New York', 'Chicago', 'Los Angeles']
}
df = pd.DataFrame(data)
# 筛选年龄大于 25 并且城市为 Los Angeles 的记录
result = df.loc[(df['Age'] > 25) & (df['City'] == 'Los Angeles')]
print(result)
Output:
3. 使用字符串条件
在处理包含字符串的数据时,我们同样可以使用 loc
来筛选满足特定条件的记录。
示例代码 3:字符串条件筛选
import pandas as pd
# 创建一个简单的 DataFrame
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'Age': [24, 27, 22, 32, 29],
'City': ['New York', 'Los Angeles', 'New York', 'Chicago', 'Los Angeles']
}
df = pd.DataFrame(data)
# 筛选城市名为 New York 的记录
result = df.loc[df['City'] == 'New York']
print(result)
Output:
示例代码 4:结合字符串和数值条件
import pandas as pd
# 创建一个简单的 DataFrame
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'Age': [24, 27, 22, 32, 29],
'City': ['New York', 'Los Angeles', 'New York', 'Chicago', 'Los Angeles']
}
df = pd.DataFrame(data)
# 筛选城市名为 New York 且年龄大于 23 的记录
result = df.loc[(df['City'] == 'New York') & (df['Age'] > 23)]
print(result)
Output:
4. 复杂条件的筛选
我们可以根据需要组合多个条件,使用 loc
进行更复杂的数据筛选。
示例代码 5:多条件组合
import pandas as pd
# 创建一个简单的 DataFrame
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'Age': [24, 27, 22, 32, 29],
'City': ['New York', 'Los Angeles', 'New York', 'Chicago', 'Los Angeles']
}
df = pd.DataFrame(data)
# 筛选年龄大于 25 或者城市为 Chicago 的记录
result = df.loc[(df['Age'] > 25) | (df['City'] == 'Chicago')]
print(result)
Output:
示例代码 6:使用 isin
方法进行筛选
isin
方法可以用来检查某列的值是否存在于我们提供的列表中。
import pandas as pd
# 创建一个简单的 DataFrame
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'Age': [24, 27, 22, 32, 29],
'City': ['New York', 'Los Angeles', 'New York', 'Chicago', 'Los Angeles']
}
df = pd.DataFrame(data)
# 筛选城市名在指定列表中的记录
result = df.loc[df['City'].isin(['Chicago', 'Los Angeles'])]
print(result)
Output:
5. 使用 loc
修改数据
loc
不仅可以用来筛选数据,还可以用来修改数据。我们可以指定条件和列名来更新满足条件的记录。
示例代码 7:修改满足条件的记录
import pandas as pd
# 创建一个简单的 DataFrame
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'Age': [24, 27, 22, 32, 29],
'City': ['New York', 'Los Angeles', 'New York', 'Chicago', 'Los Angeles']
}
df = pd.DataFrame(data)
# 将所有年龄大于 30 的人的城市改为 'San Francisco'
df.loc[df['Age'] > 30, 'City'] = 'San Francisco'
print(df)
Output:
6. 结合函数使用
我们可以结合使用 Python 的函数来创建更复杂的筛选条件。
示例代码 8:使用自定义函数进行筛选
import pandas as pd
# 创建一个简单的 DataFrame
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'Age': [24, 27, 22, 32, 29],
'City': ['New York', 'Los Angeles', 'New York', 'Chicago', 'Los Angeles']
}
df = pd.DataFrame(data)
# 定义一个函数,检查名字是否以 A 开头
def starts_with_A(name):
return name.startswith('A')
# 使用自定义函数进行筛选
result = df.loc[df['Name'].apply(starts_with_A)]
print(result)
Output:
7. 错误处理
在使用 loc
进行数据筛选时,我们需要注意可能会遇到的错误,例如键错误(KeyError)和条件错误。
示例代码 9:处理 KeyError
import pandas as pd
# 创建一个简单的 DataFrame
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'Age': [24, 27, 22, 32, 29],
'City': ['New York', 'Los Angeles', 'New York', 'Chicago', 'Los Angeles']
}
df = pd.DataFrame(data)
# 尝试访问不存在的列
try:
result = df.loc[df['NonexistentColumn'] > 0]
print(result)
except KeyError as e:
print(f"Error: {e}")
Output:
示例代码 10:处理条件错误
import pandas as pd
# 创建一个简单的 DataFrame
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'Age': [24, 27, 22, 32, 29],
'City': ['New York', 'Los Angeles', 'New York', 'Chicago', 'Los Angeles']
}
df = pd.DataFrame(data)
# 使用不正确的条件表达式
try:
result = df.loc[df['Age'] > 'twenty']
print(result)
except TypeError as e:
print(f"Error: {e}")
Output:
8. 性能优化
在处理大规模数据时,性能成为一个重要考虑因素。使用 loc
时,我们应该尽可能地优化条件表达式,避免不必要的计算。
示例代码 11:优化条件表达式
import pandas as pd
# 创建一个简单的 DataFrame
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'Age': [24, 27, 22, 32, 29],
'City': ['New York', 'Los Angeles', 'New York', 'Chicago', 'Los Angeles']
}
df = pd.DataFrame(data)
# 使用更有效的条件表达式
result = df.loc[(df['Age'] > 25) & df['City'].isin(['New York', 'Los Angeles'])]
print(result)
Output:
9. 结合其他 pandas 功能
loc
可以与 pandas 的其他功能如 groupby
, sort_values
等结合使用,以实现更复杂的数据分析任务。
示例代码 12:结合 groupby
使用
import pandas as pd
# 创建一个简单的 DataFrame
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'Age': [24, 27, 22, 32, 29],
'City': ['New York', 'Los Angeles', 'New York', 'Chicago', 'Los Angeles']
}
df = pd.DataFrame(data)
# 筛选年龄大于 25 的记录,并按城市分组
grouped = df.loc[df['Age'] > 25].groupby('City')
print(grouped)
Output:
示例代码 13:结合 sort_values
使用
import pandas as pd
# 创建一个简单的 DataFrame
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'Age': [24, 27, 22, 32, 29],
'City': ['New York', 'Los Angeles', 'New York', 'Chicago', 'Los Angeles']
}
df = pd.DataFrame(data)
# 筛选年龄大于 25 的记录,并按年龄排序
sorted_result = df.loc[df['Age'] > 25].sort_values(by='Age')
print(sorted_result)
Output:
10. 总结
在本文中,我们详细介绍了如何使用 pandas 的 loc
方法结合两个条件来筛选数据。我们提供了多个示例代码,展示了如何使用 loc
进行数据筛选、修改以及与其他功能的结合使用。