PySpark如何将字典键列表插入DataFrame列并实现展开?
解决方案
假设你已有一个示例DataFrame,比如:
import pandas as pd my_dict = {"A":"1","B":"2","C":"3","D":"4"} # 示例原DataFrame df = pd.DataFrame({"原列": ["值1", "值2"]})
步骤1:生成字典的键列表
直接提取字典的键并转为列表:
keys_list = list(my_dict.keys())
步骤2:为DataFrame新增包含键列表的列
将列表批量赋值给新列,确保每个单元格都完整保留整个列表:
df["键列表列"] = [keys_list] * len(df)
或者用pandas的广播特性实现:
df["键列表列"] = pd.Series([keys_list]).repeat(len(df))
步骤3:使用explode展开列表为多行
调用explode()方法对目标列进行行展开:
df_expanded = df.explode("键列表列")
完整代码示例
import pandas as pd my_dict = {"A":"1","B":"2","C":"3","D":"4"} df = pd.DataFrame({"原列": ["值1", "值2"]}) # 生成键列表 keys_list = list(my_dict.keys()) # 添加列表列 df["键列表列"] = [keys_list] * len(df) # 展开多行 df_expanded = df.explode("键列表列") print(df_expanded)
运行后输出结果:
原列 键列表列 0 值1 A 0 值1 B 0 值1 C 0 值1 D 1 值2 A 1 值2 B 1 值2 C 1 值2 D
如果之前尝试失败,大概率是添加列表列时的方式错误——比如直接写df["键列表列"] = keys_list,这会让pandas试图将列表的每个元素对应到单行,而非把整个列表放入每个单元格,上面的两种赋值方式可以规避这个问题。
内容的提问来源于stack exchange,提问作者paulo
相关产品推荐
相关产品推荐

