如何从Pandas DataFrame中提取指定值生成目标字典?
解决方案
根据你的需求,这里分两种常见场景给出完整代码:
场景1:所有行的信息合并到同一个字典(重复键会被后续行覆盖)
import pandas as pd # 初始化你的DataFrame df = pd.DataFrame({ 'col_1': [4.0, 4.0, 49.2], 'sum': [45.0, None, 10.8], 'value_3': [None, None, 3.4], 'value_5': [0.9, 4.5, None], 'value_7': [9.3, None, None] }) sum_dict = {} for idx, row in df.iterrows(): # 添加col_1与sum的键值对 sum_dict[row['col_1']] = row['sum'] # 处理指定的value列 target_cols = ['value_3', 'value_5', 'value_7'] for col in target_cols: cell_value = row[col] # 跳过NaN值 if not pd.isna(cell_value): # 提取列名中的数字作为键 key = int(col.split('_')[1]) sum_dict[key] = cell_value
执行后sum_dict的最终结果:
{4.0: None, 5: 4.5, 7: 9.3, 49.2: 10.8, 3: 3.4}
场景2:每行生成独立字典并收集到列表中(保留所有行的独立数据)
如果需要保留每行的独立字典,避免键覆盖,可以用列表存储:
import pandas as pd df = pd.DataFrame({ 'col_1': [4.0, 4.0, 49.2], 'sum': [45.0, None, 10.8], 'value_3': [None, None, 3.4], 'value_5': [0.9, 4.5, None], 'value_7': [9.3, None, None] }) sum_dicts = [] for idx, row in df.iterrows(): row_dict = {} row_dict[row['col_1']] = row['sum'] target_cols = ['value_3', 'value_5', 'value_7'] for col in target_cols: cell_value = row[col] if not pd.isna(cell_value): key = int(col.split('_')[1]) row_dict[key] = cell_value sum_dicts.append(row_dict)
执行后sum_dicts的结果:
[ {4.0: 45.0, 5: 0.9, 7: 9.3}, {4.0: None, 5: 4.5}, {49.2: 10.8, 3: 3.4} ]
关键逻辑说明
- 字典初始化位置:场景1放在循环外避免数据清空,场景2放在循环内生成每行独立字典。
- 用
pd.isna()准确判断单元格是否为NaN值。 - 通过
col.split('_')[1]提取列名中的数字部分,转成整数作为新键。
内容的提问来源于stack exchange,提问作者EngGu
相关产品推荐
相关产品推荐

