基于字典键将字典值分配至DataFrame指定列的报错问题
问题原因与解决方案
问题分析
你写的循环逻辑存在缺陷:遍历字典键值对时,每匹配到一个列就往row列表里追加值,最终row的长度等于字典的键数量,而非DataFrame的列数。当两者数量不一致时,就会触发"mismatched columns"错误——因为DataFrame需要与列数匹配的元素来填充一行。
解决方案
完全不需要手动构造row列表,Pandas原生支持用字典直接匹配列名赋值,缺失的列会自动填充NaN,以下是两种简洁的实现方式:
方法1:直接用loc赋值(最简写法)
import pandas as pd # 初始化空DataFrame countries_df = pd.DataFrame(columns=['esp', 'eng', 'mex', 'ger']) names = {'esp': 'David','eng': 'Adam','mex': 'Jose'} # 直接用字典赋值,自动匹配列名,缺失列补NaN countries_df.loc[len(countries_df)] = names
方法2:用Series构造行后合并
如果需要更明确的列索引匹配,可以先创建对应列的Series,再合并到DataFrame:
import pandas as pd countries_df = pd.DataFrame(columns=['esp', 'eng', 'mex', 'ger']) names = {'esp': 'David','eng': 'Adam','mex': 'Jose'} # 创建以DataFrame列为索引的Series,缺失键自动补NaN new_row = pd.Series(names, index=countries_df.columns) # 转置后合并到原DataFrame countries_df = pd.concat([countries_df, new_row.to_frame().T], ignore_index=True)
两种方法最终都会得到符合要求的结果:
| esp | eng | mex | ger |
|---|---|---|---|
| David | Adam | Jose | NaN |
内容的提问来源于stack exchange,提问作者Artemii
相关产品推荐
相关产品推荐

