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

如何在Python字典列表中按日期范围和kind字段筛选数据?

字典列表筛选:Pandas vs 原生Python实现

先修正你的Pandas代码错误

你的代码里存在几个明显问题:

  • taxes是字典列表,无法直接通过taxes['start_date']调用列,必须先转换成Pandas DataFrame
  • 拼写错误:end_data应为end_date
  • 未定义变量:belastingen需替换为转换后的DataFrame变量名

正确的Pandas实现代码:

import pandas as pd

taxes = [{  "kind": "g",  "vat": 21.0,  "start_date": "2013-01-01",  "end_date": "2013-12-31"},
{  "kind": "g",  "vat": 9.0,  "start_date": "2014-01-01",  "end_date": "2014-12-31"},
{  "kind": "e",   "vat": 21.0,   "start_date": "2013-01-01",  "end_date": "2013-12-31"},
{  "kind": "e",  "vat": 9.0,  "start_date": "2016-01-01",   "end_date": "2016-12-31"}]

# 转换为DataFrame
df = pd.DataFrame(taxes)
# 可选:将日期列转为datetime类型,支持更多日期操作(字符串比较也可正常工作)
df['start_date'] = pd.to_datetime(df['start_date'])
df['end_date'] = pd.to_datetime(df['end_date'])

target_date = pd.to_datetime('2013-05-31')
# 构建筛选条件:日期在区间内,且kind为g或e
mask = (df['start_date'] <= target_date) & (df['end_date'] >= target_date) & df['kind'].isin(['g', 'e'])
# 提取筛选结果
result = df.loc[mask]
print(result)

原生Python的Pythonic实现(列表推导式)

不用Pandas也能写出简洁的Pythonic代码,列表推导式完全替代冗长的循环:

taxes = [{  "kind": "g",  "vat": 21.0,  "start_date": "2013-01-01",  "end_date": "2013-12-31"},
{  "kind": "g",  "vat": 9.0,  "start_date": "2014-01-01",  "end_date": "2014-12-31"},
{  "kind": "e",   "vat": 21.0,   "start_date": "2013-01-01",  "end_date": "2013-12-31"},
{  "kind": "e",  "vat": 9.0,  "start_date": "2016-01-01",   "end_date": "2016-12-31"}]

target_date = '2013-05-31'
# 列表推导式筛选符合条件的条目
result = [
    item for item in taxes
    if item['start_date'] <= target_date <= item['end_date']
    and item['kind'] in ['g', 'e']
]
print(result)

哪种方式更合适?

  • 如果数据量较小,或仅需单次筛选操作,原生Python列表推导式足够用:代码简洁、无需额外依赖,运行效率也能满足需求。
  • 如果数据量较大,或后续需要进行复杂数据处理(如分组统计、多条件聚合、日期运算等),Pandas的向量化操作更高效,语法也更简洁易读,适合复杂数据场景。

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

相关产品推荐
方舟 Agent Plan

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

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