Python Pandas 中如何在两个日期范围内筛选 DataFrame
Pandas 是 Python 中广泛使用的数据处理库。在 Pandas 中想要筛选 DataFrame 里的特定条件时,我们可以使用 loc 函数。本文将介绍如何使用 loc 函数在 Pandas 中根据两个日期筛选 DataFrame。
准备数据
在介绍如何筛选 DataFrame 前,我们先准备一个测试数据。代码如下:
import pandas as pd
df = pd.DataFrame({
'date': ['2021-01-01', '2021-01-02', '2021-01-03',
'2021-01-04', '2021-01-05', '2021-01-06'],
'data': [1, 3, 2, 4, 5, 6]
})
df['date'] = pd.to_datetime(df['date']) # 将 date 字符串转换为 datetime 类型
以上代码创建了一个 DataFrame,其中包含两个列:date 和 data。date 列表示日期,data 列中的数字表示某一天的数据。
筛选指定日期范围
在 Pandas 中,根据两个日期筛选 DataFrame 时,我们可以使用 loc 函数和布尔索引。代码如下:
start_date = '2021-01-02'
end_date = '2021-01-05'
df_filtered = df.loc[(df['date'] >= start_date) & (df['date'] <= end_date)]
print(df_filtered)
以上代码中,我们定义了一个起始日期和一个终止日期。然后使用 loc 函数和布尔索引筛选出 DataFrame 中在这两个日期范围内的行。
输出结果为:
date data
1 2021-01-02 3
2 2021-01-03 2
3 2021-01-04 4
4 2021-01-05 5
从输出结果中,我们可以看到只输出了在所筛选的日期范围内的行。
选择不同的日期格式
当使用 Pandas 时,日期格式非常重要。如果我们的 DataFrame 中日期格式与所用代码的日期格式不同,则需要在代码中进行转换。以下是转换日期格式的示例代码:
df = pd.DataFrame({
'date': ['2021/01/01', '2021/01/02', '2021/01/03',
'2021/01/04', '2021/01/05', '2021/01/06'],
'data': [1, 3, 2, 4, 5, 6]
})
df['date'] = pd.to_datetime(df['date'], format='%Y/%m/%d')
在以上代码中,我们使用了 format 参数指定日期格式。
筛选两个时间段之间的日期
除了使用具体日期筛选数据以外,我们还可以使用 months,years,weeks,days 等时间区间筛选数据。
下面示例代码将按周筛选特定日期范围中的数据:
start_date = '2021-01-02'
end_date = '2021-01-31'
df_filtered = df.loc[(df['date'] >= start_date) & (df['date'] <= end_date)]
weekdays = [0, 1, 2, 3, 4, 5, 6]
weekly_filtered = df_filtered[df_filtered['date'].dt.weekday.isin(weekdays)]
print(weekly_filtered)
以上代码会筛选出 start_date 和 end_date 日期之间的数据。然后,使用 dt 属性检索日期,获取这段时间内的所有周日至周六的数据。
结论
通过以上示例代码,您现在已经学会了在 Pandas 中使用 loc 函数根据两个日期范围筛选 DataFrame 的方法。在使用 loc 函数时,确保您使用了正确的日期格式,并清楚您要在日期范围中选择哪些数据。如果您需要更详细的 Pandas教程,建议查看 Pandas 官方文档。Happy coding!