将含字典的列表转换为pandas DataFrame时遇报错求解决
解决列表含字典与np.nan转DataFrame的报错问题
报错原因
当你传入的列表第一个元素是字典时,pandas会默认把列表里所有元素都按字典格式解析,提取键作为列名。但你列表里的np.nan是float类型,没有keys()方法,直接触发了AttributeError。
解决方案
方案1:把np.nan改成对应结构的字典
如果想让第二行在aa列显示NaN,直接把np.nan替换成空字典,或者明确指定aa键对应NaN值的字典:
import pandas as pd import numpy as np # 方式1:用空字典 pd.DataFrame([{'aa': 10}, {}]) # 方式2:指定列的NaN值 pd.DataFrame([{'aa': 10}, {'aa': np.nan}])
两种方式都会生成符合预期的DataFrame:
| aa | |
|---|---|
| 0 | 10 |
| 1 | NaN |
方案2:先建DataFrame再追加行
先基于字典创建初始DataFrame,再添加含NaN的行(注意pandas版本差异):
import pandas as pd import numpy as np df = pd.DataFrame([{'aa': 10}]) # pandas 2.0及以上版本用_append df = df._append({'aa': np.nan}, ignore_index=True) # pandas 2.0以下版本用append # df = df.append({'aa': np.nan}, ignore_index=True)
方案3:用pd.DataFrame.from_dict构造
把数据整理成规范的字典列表,再调用from_dict方法:
import pandas as pd import numpy as np data = [{'aa': 10}, {'aa': np.nan}] df = pd.DataFrame.from_dict(data)
内容的提问来源于stack exchange,提问作者Brian Smith
相关产品推荐
相关产品推荐

