You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

遍历嵌套列表提取数据创建DataFrame时数据错乱的问题求助

问题解决:遍历嵌套列表提取数据并创建DataFrame

你的代码出现数据错乱,核心问题是依赖固定索引位置提取数据——部分子列表缺少Age字段,导致索引对应关系完全错误。比如第二个子列表里,索引2对应的是Country而非Age,直接按索引取值会把国家信息误放到年龄列表里;同时遇到索引错误时没有补全空值,导致各个列表长度不一致,根本没法正确生成DataFrame。

修正方案1:按字段名匹配提取(兼容原代码结构)

把每个子列表转成字典,通过字段名精准取值,缺失字段补默认值:

fulllist = [
    [
        {'Variable': 'First_Name', 'Answer': 'Anne'},
        {'Variable': 'Middle_Name', 'Answer': 'Wanjohi'},
        {'Variable': 'Age', 'Answer': '50'},
        {'Variable': 'Country', 'Answer': 'Uganda'}
    ],
    [
        {'Variable': 'First_Name', 'Answer': 'John'},
        {'Variable': 'Middle_Name', 'Answer': 'Wagwara'},
        {'Variable': 'Country', 'Answer': 'Kenya'}
    ],
    [
        {'Variable': 'First_Name', 'Answer': 'Jeff'},
        {'Variable': 'Middle_Name', 'Answer': 'Simboyi'},
        {'Variable': 'Age', 'Answer': '20'},
        {'Variable': 'Country', 'Answer': 'UK'}
    ],
    [
        {'Variable': 'First_Name', 'Answer': 'Ken'},
        {'Variable': 'Middle_Name', 'Answer': 'Kumbua'},
        {'Variable': 'Country', 'Answer': 'Tanzania'}
    ]
]

First_Name = [] 
Middle_Name = []
Age = []
Country = []

for sublist in fulllist:
    # 将子列表转为{Variable: Answer}的字典
    item_map = {item['Variable']: item['Answer'] for item in sublist}
    # 按字段名提取,缺失则补None(也可以换成''或其他默认值)
    First_Name.append(item_map.get('First_Name'))
    Middle_Name.append(item_map.get('Middle_Name'))
    Age.append(item_map.get('Age'))
    Country.append(item_map.get('Country'))

# 生成DataFrame
import pandas as pd
df = pd.DataFrame({
    'First_Name': First_Name,
    'Middle_Name': Middle_Name,
    'Age': Age,
    'Country': Country
})

print(df)

修正方案2:直接生成字典列表创建DataFrame(更简洁)

跳过单独维护列表的步骤,直接把每个子列表转成字典,批量生成DataFrame:

import pandas as pd

fulllist = [
    [
        {'Variable': 'First_Name', 'Answer': 'Anne'},
        {'Variable': 'Middle_Name', 'Answer': 'Wanjohi'},
        {'Variable': 'Age', 'Answer': '50'},
        {'Variable': 'Country', 'Answer': 'Uganda'}
    ],
    [
        {'Variable': 'First_Name', 'Answer': 'John'},
        {'Variable': 'Middle_Name', 'Answer': 'Wagwara'},
        {'Variable': 'Country', 'Answer': 'Kenya'}
    ],
    [
        {'Variable': 'First_Name', 'Answer': 'Jeff'},
        {'Variable': 'Middle_Name', 'Answer': 'Simboyi'},
        {'Variable': 'Age', 'Answer': '20'},
        {'Variable': 'Country', 'Answer': 'UK'}
    ],
    [
        {'Variable': 'First_Name', 'Answer': 'Ken'},
        {'Variable': 'Middle_Name', 'Answer': 'Kumbua'},
        {'Variable': 'Country', 'Answer': 'Tanzania'}
    ]
]

# 把所有子列表转为字典,组成字典列表
data_dicts = [{item['Variable']: item['Answer'] for item in sub} for sub in fulllist]
# 直接生成DataFrame,缺失字段自动填充NaN
df = pd.DataFrame(data_dicts)

print(df)

两种方案都通过字段名匹配替代索引取值,彻底避免了字段顺序或缺失导致的数据错乱,同时保证所有字段的列表长度一致,能正常生成符合预期的DataFrame。

内容的提问来源于stack exchange,提问作者Moses

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 02:59:56