如何基于指定键列表从defaultdict生成Pandas DataFrame
实现方法:保留指定键对应的DataFrame条目
这里有两种实用的实现方式,按需选择:
方法1:先过滤字典再转DataFrame(更高效)
先从defaultdict里筛选出目标键对应的键值对,再转换成DataFrame,避免生成全量数据后再过滤的开销:
from collections import defaultdict import pandas as pd # 示例数据 my_defaultdict = defaultdict(float, {'62007459': 0, '68092193': 0, '40224646': 120.92999999999999}) lcodes = ['40224646','60000216'] # 筛选出lcodes中存在的键值对 filtered_items = {k: v for k, v in my_defaultdict.items() if k in lcodes} # 转换为DataFrame filtered_df = pd.DataFrame(filtered_items.items(), columns=['code', 'value'])
方法2:先生成全量DataFrame再筛选
如果已经生成了全量DataFrame,直接用isin()方法过滤行即可:
# 先生成全量DataFrame full_df = pd.DataFrame(my_defaultdict.items(), columns=['code', 'value']) # 只保留code列在lcodes中的条目 filtered_df = full_df[full_df['code'].isin(lcodes)]
额外需求:保留lcodes中所有键(包括字典里不存在的)
如果需要把lcodes里的所有键都保留,字典里没有的键填充默认值(比如0),可以用reindex:
full_df = pd.DataFrame(my_defaultdict.items(), columns=['code', 'value']).set_index('code') # 按lcodes重新索引,不存在的键填充0 filtered_df = full_df.reindex(lcodes, fill_value=0).reset_index()
内容的提问来源于stack exchange,提问作者Arash Howaida
相关产品推荐
相关产品推荐

