如何使用 pandas 的 loc 方法结合条件表达式来选择和操作数据
参考:pandas dataframe loc condition
在数据分析中,pandas 是一个非常强大的 Python 数据处理库。DataFrame 是 pandas 中的一个基本数据结构,它是一个二维的表格型数据结构。在处理 DataFrame 时,经常需要根据一定的条件来选择数据,loc
方法是 pandas 提供的一个功能强大的数据选择方式,它允许我们通过标签索引行数据,同时还可以根据条件进行筛选。
本文将详细介绍如何使用 pandas 的 loc
方法结合条件表达式来选择和操作数据。我们将通过多个示例代码来展示不同的使用场景。
使用 loc 选择数据
loc
方法主要用于通过标签索引选择数据,其基本语法是 DataFrame.loc[行标签, 列标签]
。当我们结合条件表达式使用时,可以非常灵活地对数据进行筛选。
示例 1: 基本的 loc 使用
import pandas as pd
# 创建一个示例 DataFrame
data = {
'website': ['pandasdataframe.com', 'example.com', 'testsite.com'],
'visits': [1000, 1500, 900]
}
df = pd.DataFrame(data)
# 使用 loc 选择 website 为 'pandasdataframe.com' 的行
result = df.loc[df['website'] == 'pandasdataframe.com']
print(result)
Output:
示例 2: 选择多个条件满足的数据
import pandas as pd
# 创建一个示例 DataFrame
data = {
'website': ['pandasdataframe.com', 'example.com', 'pandasdataframe.com'],
'visits': [1000, 1500, 900],
'revenue': [200, 300, 150]
}
df = pd.DataFrame(data)
# 使用 loc 选择 website 为 'pandasdataframe.com' 并且 visits 大于 950 的行
result = df.loc[(df['website'] == 'pandasdataframe.com') & (df['visits'] > 950)]
print(result)
Output:
示例 3: 选择特定列的数据
import pandas as pd
# 创建一个示例 DataFrame
data = {
'website': ['pandasdataframe.com', 'example.com', 'pandasdataframe.com'],
'visits': [1000, 1500, 900],
'revenue': [200, 300, 150]
}
df = pd.DataFrame(data)
# 使用 loc 选择所有行的 'website' 和 'visits' 列
result = df.loc[:, ['website', 'visits']]
print(result)
Output:
示例 4: 使用 loc 更新数据
import pandas as pd
# 创建一个示例 DataFrame
data = {
'website': ['pandasdataframe.com', 'example.com', 'pandasdataframe.com'],
'visits': [1000, 1500, 900],
'revenue': [200, 300, 150]
}
df = pd.DataFrame(data)
# 使用 loc 更新 'pandasdataframe.com' 的 'visits' 值
df.loc[df['website'] == 'pandasdataframe.com', 'visits'] = 1200
print(df)
Output:
示例 5: 使用条件表达式选择特定行并获取其索引
import pandas as pd
# 创建一个示例 DataFrame
data = {
'website': ['pandasdataframe.com', 'example.com', 'pandasdataframe.com'],
'visits': [1000, 1500, 900],
'revenue': [200, 300, 150]
}
df = pd.DataFrame(data)
# 使用 loc 获取 'pandasdataframe.com' 的行索引
indices = df.loc[df['website'] == 'pandasdataframe.com'].index
print(indices)
Output:
示例 6: 结合条件和切片使用 loc
import pandas as pd
# 创建一个示例 DataFrame
data = {
'website': ['pandasdataframe.com', 'example.com', 'pandasdataframe.com', 'testsite.com'],
'visits': [1000, 1500, 900, 800],
'revenue': [200, 300, 150, 100]
}
df = pd.DataFrame(data)
# 使用 loc 选择前三行,并且 'website' 为 'pandasdataframe.com' 的数据
result = df.loc[df['website'] == 'pandasdataframe.com'].iloc[:3]
print(result)
Output:
示例 7: 使用 loc 进行复杂条件查询
import pandas as pd
# 创建一个示例 DataFrame
data = {
'website': ['pandasdataframe.com', 'example.com', 'pandasdataframe.com', 'testsite.com'],
'visits': [1000, 1500, 900, 800],
'revenue': [200, 300, 150, 100],
'country': ['US', 'US', 'UK', 'UK']
}
df = pd.DataFrame(data)
# 使用 loc 选择 'website' 为 'pandasdataframe.com' 并且 'country' 为 'US' 的数据
result = df.loc[(df['website'] == 'pandasdataframe.com') & (df['country'] == 'US')]
print(result)
Output:
示例 8: 使用 loc 选择特定行并修改多列数据
import pandas as pd
# 创建一个示例 DataFrame
data = {
'website': ['pandasdataframe.com', 'example.com', 'pandasdataframe.com', 'testsite.com'],
'visits': [1000, 1500, 900, 800],
'revenue': [200, 300, 150, 100],
'country': ['US', 'US', 'UK', 'UK']
}
df = pd.DataFrame(data)
# 使用 loc 选择 'website' 为 'pandasdataframe.com' 的行,并更新 'visits' 和 'revenue'
df.loc[df['website'] == 'pandasdataframe.com', ['visits', 'revenue']] = [1100, 250]
print(df)
Output:
示例 9: 使用 loc 选择行并删除
import pandas as pd
# 创建一个示例 DataFrame
data = {
'website': ['pandasdataframe.com', 'example.com', 'pandasdataframe.com', 'testsite.com'],
'visits': [1000, 1500, 900, 800],
'revenue': [200, 300, 150, 100],
'country': ['US', 'US', 'UK', 'UK']
}
df = pd.DataFrame(data)
# 使用 loc 选择 'website' 为 'pandasdataframe.com' 的行并删除
df.drop(df.loc[df['website'] == 'pandasdataframe.com'].index, inplace=True)
print(df)
Output:
示例 10: 使用 loc 与时间数据
import pandas as pd
# 创建一个示例 DataFrame
data = {
'website': ['pandasdataframe.com', 'example.com', 'pandasdataframe.com', 'testsite.com'],
'visits': [1000, 1500, 900, 800],
'revenue': [200, 300, 150, 100],
'date': pd.to_datetime(['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04'])
}
df = pd.DataFrame(data)
# 使用 loc 选择 'date' 在 '2021-01-01' 到 '2021-01-03' 之间的数据
result = df.loc[df['date'].between('2021-01-01', '2021-01-03')]
print(result)
Output:
示例 11: 使用 loc 选择特定条件下的最大值
import pandas as pd
# 创建一个示例 DataFrame
data = {
'website': ['pandasdataframe.com', 'example.com', 'pandasdataframe.com', 'testsite.com'],
'visits': [1000, 1500, 900, 800],
'revenue': [200, 300, 150, 100],
'country': ['US', 'US', 'UK', 'UK']
}
df = pd.DataFrame(data)
# 使用 loc 找到 'visits' 最大值对应的行
max_visits = df['visits'].max()
result = df.loc[df['visits'] == max_visits]
print(result)
Output:
示例 12: 使用 loc 与 isin 方法选择多个匹配值
import pandas as pd
# 创建一个示例 DataFrame
data = {
'website': ['pandasdataframe.com', 'example.com', 'pandasdataframe.com', 'testsite.com'],
'visits': [1000, 1500, 900, 800],
'revenue': [200, 300, 150, 100],
'country': ['US', 'US', 'UK', 'UK']
}
df = pd.DataFrame(data)
# 使用 loc 与 isin 方法选择 'country' 为 'US' 或 'UK' 的行
result = df.loc[df['country'].isin(['US', 'UK'])]
print(result)
Output:
示例 13: 使用 loc 与 str.contains 方法进行字符串匹配
import pandas as pd
# 创建一个示例 DataFrame
data = {
'website': ['pandasdataframe.com', 'example.com', 'pandasdataframe.com', 'testsite.com'],
'visits': [1000, 1500, 900, 800],
'revenue': [200, 300, 150, 100]
}
df = pd.DataFrame(data)
# 使用 loc 与 str.contains 方法选择 'website' 包含 'pandasdataframe.com' 的行
result = df.loc[df['website'].str.contains('pandasdataframe.com')]
print(result)
Output:
示例 14: 使用 loc 与 query 方法进行条件查询
import pandas as pd
# 创建一个示例 DataFrame
data = {
'website': ['pandasdataframe.com', 'example.com', 'pandasdataframe.com', 'testsite.com'],
'visits': [1000, 1500, 900, 800],
'revenue': [200, 300, 150, 100],
'country': ['US', 'US', 'UK', 'UK']
}
df = pd.DataFrame(data)
# 使用 query 方法与 loc 选择 'visits' 大于 900 的行
result = df.loc[df.query('visits > 900').index]
print(result)
Output:
示例 15: 使用 loc 进行多条件排序
import pandas as pd
# 创建一个示例 DataFrame
data = {
'website': ['pandasdataframe.com', 'example.com', 'pandasdataframe.com', 'testsite.com'],
'visits': [1000, 1500, 900, 800],
'revenue': [200, 300, 150, 100],
'country': ['US', 'US', 'UK', 'UK']
}
df = pd.DataFrame(data)
# 使用 loc 选择所有数据,并根据 'visits' 和 'revenue' 进行降序排序
result = df.loc[:, ['website', 'visits', 'revenue', 'country']].sort_values(by=['visits', 'revenue'], ascending=[False, False])
print(result)
Output:
示例 16: 使用 loc 进行条件赋值
import pandas as pd
# 创建一个示例 DataFrame
data = {
'website': ['pandasdataframe.com', 'example.com', 'pandasdataframe.com', 'testsite.com'],
'visits': [1000, 1500, 900, 800],
'revenue': [200, 300, 150, 100],
'country': ['US', 'US', 'UK', 'UK']
}
df = pd.DataFrame(data)
# 使用 loc 对 'country' 为 'UK' 的 'revenue' 进行赋值
df.loc[df['country'] == 'UK', 'revenue'] = 200
print(df)
Output:
示例 17: 使用 loc 与 lambda 表达式进行复杂条件选择
import pandas as pd
# 创建一个示例 DataFrame
data = {
'website': ['pandasdataframe.com', 'example.com', 'pandasdataframe.com', 'testsite.com'],
'visits': [1000, 1500, 900, 800],
'revenue': [200, 300, 150, 100],
'country': ['US', 'US', 'UK', 'UK']
}
df = pd.DataFrame(data)
# 使用 loc 与 lambda 表达式选择 'visits' 大于平均访问量的行
avg_visits = df['visits'].mean()
result = df.loc[df['visits'].apply(lambda x: x > avg_visits)]
print(result)
Output:
示例 18: 使用 loc 进行行列同时选择
import pandas as pd
# 创建一个示例 DataFrame
data = {
'website': ['pandasdataframe.com', 'example.com', 'pandasdataframe.com', 'testsite.com'],
'visits': [1000, 1500, 900, 800],
'revenue': [200, 300, 150, 100],
'country': ['US', 'US', 'UK', 'UK']
}
df = pd.DataFrame(data)
# 使用 loc 同时选择特定的行和列
result = df.loc[df['country'] == 'US', ['website', 'revenue']]
print(result)
Output:
示例 19: 使用 loc 与时间条件选择
import pandas as pd
# 创建一个示例 DataFrame
data = {
'website': ['pandasdataframe.com', 'example.com', 'pandasdataframe.com', 'testsite.com'],
'visits': [1000, 1500, 900, 800],
'revenue': [200, 300, 150, 100],
'date': pd.to_datetime(['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04'])
}
df = pd.DataFrame(data)
# 使用 loc 选择 'date' 为 '2021-01-02' 的数据
result = df.loc[df['date'] == pd.Timestamp('2021-01-02')]
print(result)
Output:
示例 20: 使用 loc 进行条件删除
import pandas as pd
# 创建一个示例 DataFrame
data = {
'website': ['pandasdataframe.com', 'example.com', 'pandasdataframe.com', 'testsite.com'],
'visits': [1000, 1500, 900, 800],
'revenue': [200, 300, 150, 100],
'country': ['US', 'US', 'UK', 'UK']
}
df = pd.DataFrame(data)
# 使用 loc 选择 'country' 为 'UK' 的行并删除
df.drop(df.loc[df['country'] == 'UK'].index, inplace=True)
print(df)
Output:
以上示例展示了如何使用 pandas 的 loc
方法结合不同的条件表达式来选择和操作 DataFrame 中的数据。通过这些示例,您可以看到 loc
方法的强大和灵活性,它是数据分析和数据处理中不可或缺的工具之一。