能否将含多值单元格的DataFrame转换为值含列表的字典?
实现方法
完全可以实现,核心是先对CustRef列做格式转换,再生成目标字典,具体操作如下:
步骤1:处理CustRef列的格式
针对CustRef列的每个值做判断:
- 若值包含逗号,按
,分割字符串,再将每个分割后的元素转为整数,组成列表 - 若值不包含逗号,直接转为整数
步骤2:生成目标字典
将处理后的CustRef值与ID对应,用ID的字符串形式作为键,处理后的值作为值构建字典
完整代码示例
import pandas as pd # 构造示例DataFrame df = pd.DataFrame({ 'ID': [0, 1, 2], 'CustRef': ['111', '222', '333, 444, 555, 666'] }) # 定义处理函数 def process_custref(val): if ', ' in val: return [int(x) for x in val.split(', ')] else: return int(val) # 应用处理函数到CustRef列 df['processed_CustRef'] = df['CustRef'].apply(process_custref) # 生成目标字典,将ID转为字符串类型 result_dict = {str(row['ID']): row['processed_CustRef'] for _, row in df.iterrows()} print(result_dict) # 输出:{'0': 111, '1': 222, '2': [333, 444, 555, 666]}
简化写法(用lambda表达式)
如果不想定义单独函数,也可以用lambda表达式简化处理步骤:
df['processed_CustRef'] = df['CustRef'].apply( lambda x: [int(i) for i in x.split(', ')] if ', ' in x else int(x) ) result_dict = {str(k): v for k, v in df.set_index('ID')['processed_CustRef'].to_dict().items()}
内容的提问来源于stack exchange,提问作者Robsmith
相关产品推荐
相关产品推荐

