You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Pandas筛选每月1日和15日数据时返回空DataFrame的问题

Pandas筛选每月1日和15日数据返回空DataFrame的原因及解决方法

问题背景

需要从大型CSV数据集里筛选出每月1日和15日的所有记录并保存到新CSV文件。单独筛选1日数据的代码可以正常得到结果,但同时筛选1日和15日的代码返回空DataFrame。

单独筛选1日数据的代码及结果

print(df[(df['data___date_time'].dt.day == 1)])

运行结果:

data___date_time       NO2       SO2   PM10
26    2020-07-01 00:00:00  1.591616  0.287604    NaN
27    2020-07-01 01:00:00  1.486401       NaN    NaN
28    2020-07-01 02:00:00  1.362056       NaN    NaN
29    2020-07-01 03:00:00  1.295101  0.194399    NaN
30    2020-07-01 04:00:00  1.260667  0.362168    NaN
                  ...       ...       ...    ...
17054 2022-07-01 19:00:00  2.894369  2.077140  19.34
17055 2022-07-01 20:00:00  3.644265  1.656386  23.09
17056 2022-07-01 21:00:00  2.907760  1.291555  23.67
17057 2022-07-01 22:00:00  2.974715  1.318185  27.68
17058 2022-07-01 23:00:00  2.858022  1.169057  25.18

错误的同时筛选代码及结果

print(df[(df['data___date_time'].dt.day == 1) & (df['data___date_time'].dt.day == 15)])

运行结果:

Empty DataFrame
Columns: [data___date_time, NO2, SO2, PM10]
Index: []

问题原因

你用了&(逻辑与)运算符,这要求某一行的data___date_time字段的日数同时等于1和15,这在逻辑上是不可能的,所以返回空DataFrame。

解决方法

要筛选出日数是1或者15的记录,有两种常用方法:

方法1:使用逻辑或运算符|

# 筛选1日或15日的记录
filtered_df = df[(df['data___date_time'].dt.day == 1) | (df['data___date_time'].dt.day == 15)]
# 保存到新CSV文件
filtered_df.to_csv('filtered_data.csv', index=False)

方法2:使用isin()方法(更简洁,适合多个值的情况)

# 定义需要筛选的日数列表
target_days = [1, 15]
# 筛选日数在列表中的记录
filtered_df = df[df['data___date_time'].dt.day.isin(target_days)]
# 保存到新CSV文件
filtered_df.to_csv('filtered_data.csv', index=False)

内容的提问来源于stack exchange,提问作者kamyar1986

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 07:21:34