如何将字典列表转换为指定格式的Pandas DataFrame?
字典列表转DataFrame仅第一行有数据的解决方法
现有如下字典列表:
listofdict = [{'value1': [1, 2, 3, 4, 5]}, {'value2': [5, 4, 3, 2, 1]}, {'value3': ['a', 'b', 'c', 'd', 'e']}]
需要将其转换为以value1、value2、value3为列名,对应列表为列数据的DataFrame,但直接使用df = pd.DataFrame(listofdict)转换后,结果仅第一行有数据,其余行均为NaN,以下是可行的解决办法:
方法一:合并字典为单字典后转换
原列表中每个字典仅包含一个键值对,先将所有字典合并为一个完整的字典,再传入pd.DataFrame:
import pandas as pd listofdict = [{'value1': [1, 2, 3, 4, 5]}, {'value2': [5, 4, 3, 2, 1]}, {'value3': ['a', 'b', 'c', 'd', 'e']}] # 合并所有字典为单个字典 merged_dict = {} for item in listofdict: merged_dict.update(item) # 转换为DataFrame df = pd.DataFrame(merged_dict) print(df)
方法二:用pd.concat逐个转换后合并
将列表中的每个字典单独转为DataFrame,再按列方向合并:
import pandas as pd listofdict = [{'value1': [1, 2, 3, 4, 5]}, {'value2': [5, 4, 3, 2, 1]}, {'value3': ['a', 'b', 'c', 'd', 'e']}] # 逐个转换并按列合并 df = pd.concat([pd.DataFrame(d) for d in listofdict], axis=1) print(df)
原方法失效原因
pd.DataFrame(listofdict)会将列表中的每个字典视为一行数据,字典中的列表会被当作单个单元格的值,因此只有第一行能匹配到对应列的内容,后续行因无对应键值,自然显示为NaN。而我们需要的是将每个列表作为一列的完整数据,所以必须先调整数据结构,让DataFrame能识别出各列对应的完整数据集。
内容的提问来源于stack exchange,提问作者Steven Mugisha Mizero
相关产品推荐
相关产品推荐

