如何在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
相关产品推荐
相关产品推荐

