来自多个字典列表的DataFrame,其中键是索引,值是列数据

问题描述

我正在尝试从字典列表中用熊猫创建一个DataFrame,如下所示:


[{'3600': '12','7600': '1212343'},{'0': 0.0,'3600': 0.0,'7200': 0.0,'10800': 0.0,'14400': 0.0,'18000': 0.0,'21600': 0.0,'25200': 116.93828280645994} .... ]

我的列是项目列表:["col1","col2" ...]

我想要的是字典的键作为索引,字典的值应填充列。在此示例中:

                       col1                  col2
0                       0/NaN                0.0
3600                    12                   0.0
7600                    1212343              NaN
7200                    NaN                  0.0
10800                   NaN                  0.0
18000                   NaN                  0.0
21600                   NaN                  0.0
25200                   NaN                  116.93828280645994

因此,每个字典的值基本上表示列值。由于字典的大小可能不同,因此我需要添加NaN。

我以为我已经在这里Create a Dataframe from list of Dictionaries)的帮助下找到了这样的东西:


    columns = ["col","col2" ...]
    df_data = mydataasabove

    final_dict = defaultdict(list)

    for data in df_data:
        for key,value in data.items():
            final_dict[key].append(value)

    final_dict = dict(final_dict)

    df = pd.DataFrame.from_dict(final_dict,orient='index',columns=columns)

但这给了我这样的df:

                     col1                     col2
3600                   12                    0.0
7600              1212343                    NaN
0                       0                    NaN
7200                    0                    NaN
10800                   0                    NaN
14400                   0                    NaN
18000                   0                    NaN
21600                   0                    NaN
25200             116.938                    NaN

如您所见,这些值与我的列不正确对应。打印final_dict输出为:

{'3600': ['12',0.0],'7600': ['1212343'],'0': [0.0],'7200': [0.0],'10800': [0.0],'14400': [0.0],'18000': [0.0],'21600': [0.0],'25200': [116.93828280645994]}

我还尝试了Chainmap的一些方法

df = pd.DataFrame.from_dict(ChainMap(*nec_data),columns=['col1']) 但我无法添加多列。

也许有人可以借给我??将不胜感激!预先感谢

解决方法

您可以将其读取为数据框并转置,然后在df.renamef-strings的帮助下重命名以调整列名

pd.DataFrame(d).T.rename(columns=lambda x: f"col{x+1}")

          col1     col2
3600        12        0
7600   1212343      NaN
0          NaN        0
7200       NaN        0
10800      NaN        0
14400      NaN        0
18000      NaN        0
21600      NaN        0
25200      NaN  116.938

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...