遍历嵌套列表提取数据创建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
相关产品推荐
相关产品推荐

