如何将DataFrame各列所有行按顺序追加到第一列下方合并为单列
Pandas多列字典数据纵向拼接为单列实现方案
问题背景
现有DataFrame所有单元格存储值均为字典类型,仅最后一列存在少量None值,4行4列的示例结构如下:
0 1 2 3 {'id':10,'name':'Paul'} {'id':10,'age':33} {'id':10,'name':'Paul'} {'id':10,'name':'Paul'} {'id':10,'name':'Paul'} {'id':10,'age':'Paul'} {'id':10,'name':'Paul'} {'id':10,'name':'Paul'} {'id':10,'name':'Paul'} {'id':10,'name':'Paul'} {'id':10,'name':'Paul'} {'id':10,'name':'Paul'} {'id':10,'name':'Paul'} {'id':10,'name':'Paul'} {'id':10,'name':'Paul'} None
实际数据规模为500行7列,共约3500条记录,不同单元格的字典内容可重复可存在差异。
转换规则
按列顺序纵向拼接所有内容:先保留第0列全部行,再将第1列全部行追加到第0列末尾,后续每一列都按相同规则依次追加到已拼接内容的末尾,最终输出仅包含1列的DataFrame,所有原始值(包括None)完整保留。
预期输出结构参考:
0 {'id':10,'name':'Paul'} {'id':10,'name':'Paul'} {'id':10,'name':'Paul'} {'id':10,'name':'Paul'} {'id':10,'age':33} {'id':10,'age':'Paul'} {'id':10,'name':'Paul'} {'id':10,'name':'Paul'} {'id':10,'name':'Paul'} {'id':10,'name':'Paul'} ... None
实现代码
采用numpy列优先展平逻辑实现,运行效率高,适配当前数据规模无性能压力:
import pandas as pd # 将df替换为你实际使用的原始DataFrame变量名即可 result = pd.DataFrame(df.values.flatten(order='F'), columns=[0])
逻辑说明
order='F'指定按列优先顺序展平二维数组,取值顺序完全匹配「先取完一列所有行,再取下一列」的需求- 该方法不会修改原始单元格存储的值,字典、
None都会原样保留 - 逐列循环
concat的写法也可实现相同效果,但运行效率低于数组展平方案,不推荐在数据量更大的场景使用
内容的提问来源于stack exchange,提问作者pouchewar
相关产品推荐
相关产品推荐

