如何将含嵌套元组的列表转换为扁平化Pandas DataFrame?
解决方案:扁平化嵌套列表为Pandas DataFrame
没问题,我来帮你搞定这个需求!你提到的列表推导式确实是处理这类嵌套结构扁平化的高效方法,我们可以一步把嵌套结构拆成适合生成DataFrame的扁平格式,直接得到你想要的结果。
具体实现代码
先看核心代码,用列表推导式展开嵌套结构,再转换为DataFrame:
import pandas as pd nested = [['53062423-690f-4923-8f65-db710c038566', [('12253996-b2f7-46c7-b49f-09ca87cac84f', 'AFC_PoCv1.0'), ('b17bd025-611f-4728-9396-e59388ee59f6', 'Customer Profitability Sample'), ('b4a5d199-2c6f-4f8d-9fcb-5e4971254f73', 'Jammers vs Floaty Pants')]], ['988f64ea-14b2-4ad7-a899-ae40974c9139', [('9137e0f9-4063-479a-baff-8566c91302ff', 'DailySalesDashboard13Azure')]]] # 用列表推导式展开嵌套结构,生成扁平的三元组列表 flattened_data = [ (outer_id, inner_id, project_name) for outer_id, inner_tuples in nested for inner_id, project_name in inner_tuples ] # 转换为DataFrame并指定列名 df = pd.DataFrame(flattened_data, columns=['outer_id', 'inner_id', 'project_name'])
代码逻辑解释
这段列表推导式的思路非常直观:
- 先遍历外层列表的每个元素,提取出外层关联id和对应的元组列表
- 再遍历每个元组列表里的元组,把外层id和元组内的两个值(inner_id、项目名称)组合成一个新的三元组
- 最后用这个扁平的三元组列表直接创建DataFrame,指定好列名就完成了
最终输出结果
运行代码后,你会得到如下结构的DataFrame:
| outer_id | inner_id | project_name |
|---|---|---|
| 53062423-690f-4923-8f65-db710c038566 | 12253996-b2f7-46c7-b49f-09ca87cac84f | AFC_PoCv1.0 |
| 53062423-690f-4923-8f65-db710c038566 | b17bd025-611f-4728-9396-e59388ee59f6 | Customer Profitability Sample |
| 53062423-690f-4923-8f65-db710c038566 | b4a5d199-2c6f-4f8d-9fcb-5e4971254f73 | Jammers vs Floaty Pants |
| 988f64ea-14b2-4ad7-a899-ae40974c9139 | 9137e0f9-4063-479a-baff-8566c91302ff | DailySalesDashboard13Azure |
备选方法(用Pandas内置的explode)
如果你更习惯用Pandas的内置方法,也可以通过explode先拆分列表,再拆分元组:
# 创建临时DataFrame temp_df = pd.DataFrame(nested, columns=['outer_id', 'inner_data']) # 拆分inner_data列的列表,每个元组单独一行 temp_df = temp_df.explode('inner_data') # 把元组拆分为两列 temp_df[['inner_id', 'project_name']] = pd.DataFrame(temp_df['inner_data'].tolist(), index=temp_df.index) # 删除临时列,得到最终结果 df = temp_df.drop('inner_data', axis=1)
两种方法都能实现需求,列表推导式更简洁直观,适合这种小规模的嵌套结构~
内容的提问来源于stack exchange,提问作者Steve
相关产品推荐
相关产品推荐

