如何将值为非字符串对象的多值字典映射并拆分为多个Pandas列
解决方法
你只需要在map操作后追加.to_list(),一行代码即可完成需求:
import numpy as np import pandas as pd # 多值字典 d1 = {67045: np.array([20200911, 20201113, 20201230, np.nan, np.nan]), 67046: np.array([20190909, 2020102, 20201230, 1, np.nan])} # 带key的原始DataFrame df = pd.DataFrame({'key': [67045, 67046]}) # 修正后的多列赋值代码 df[['c1', 'c2', 'c3', 'c4', 'c5']] = df['key'].map(d1).to_list()
运行后得到的结果和你预期的完全一致:
key c1 c2 c3 c4 c5 0 67045 20200911 20201113 20201230 NaN NaN 1 67046 20190909 2020102 20201230 1.0 NaN
原代码失败原因
df['key'].map(d1)返回的是元素为numpy数组的一维Series,Pandas默认不会自动将数组元素拆分为多列,转为嵌套列表结构后,Pandas会自动将子列表的每个元素对应到目标列的每一行。
可选替代方案
如果需要单独处理展开后的列,可以先构造独立的展开DataFrame再拼接:
expand_df = pd.DataFrame(df['key'].map(d1).tolist(), columns=['c1','c2','c3','c4','c5'], index=df.index) df = pd.concat([df, expand_df], axis=1)
内容的提问来源于stack exchange,提问作者John Stud
相关产品推荐
相关产品推荐

