如何遍历含嵌套数组的Pandas DataFrame列并展开数据
解决嵌套数据转扁平DataFrame的问题
嘿,我来帮你搞定这个数据整理的问题!你现在需要把这种嵌套结构的列表数据,展开成你想要的扁平DataFrame格式,其实不用纠结iterrows、iteritems这些方法,直接在转DataFrame前把数据处理成扁平列表会更简单高效。
第一步:先展开嵌套数据
你的原始数据是嵌套的列表结构,我们可以用一个简单的循环(或者更简洁的列表推导式)把它拆成扁平的条目:
# 你的原始数据 data = [['file0090', ([[ 84, 55, 189], [248, 100, 18], [ 68, 115, 88]])], ['file6565', ([[ 86, 58, 189], [24, 10, 118], [ 68, 11, 8]]) ]] # 用列表推导式快速展开数据 flattened_data = [[filename] + sub_list for filename, nested_arrays in data for sub_list in nested_arrays]
如果觉得列表推导式有点绕,也可以用更直观的循环写法:
flattened_data = [] for filename, nested_arrays in data: # 遍历每个嵌套的子数组,把文件名和子数组元素拼在一起 for sub_list in nested_arrays: flattened_data.append([filename] + sub_list)
第二步:转成目标DataFrame
现在flattened_data已经是我们想要的扁平结构了,直接用pandas转成DataFrame就行:
import pandas as pd df = pd.DataFrame(flattened_data, columns=['col0', 'col1', 'col2', 'col3']) print(df)
运行后你会得到完全符合需求的结果:
col0 col1 col2 col3 0 file0090 84 55 189 1 file0090 248 100 18 2 file0090 68 115 88 3 file6565 86 58 189 4 file6565 24 10 118 5 file6565 68 11 8
为什么之前的方法没成功?
你之前尝试用iterrows等方法,可能是先把原始数据转成了DataFrame,这时第二列是嵌套的数组对象,遍历的时候需要额外拆分,但其实我们完全可以在转DataFrame前就把数据处理好,这样更高效也更不容易出错。
内容的提问来源于stack exchange,提问作者Carlos Carvalho
相关产品推荐
相关产品推荐

