从列表的字典列表创建熊猫数据框

时间:2020-01-08 21:01:27

标签: python pandas

如何从包含每个键行列表的字典列表中创建数据框? 请检查以下示例:

./mongod start
dirname: missing operand
Try 'dirname --help' for more information.
Starting mongod:                                           [  OK  ]

到目前为止一切都很好。
现在,我尝试追加rec_set2,这就是发生的情况:

>>> import pandas as pd
>>> rec_set1 = {'col1': [1,2,3], 'col2': [5,3,4], 'col3': ['x','y','z']}
>>> rec_set2 = {'col1': [5,6,7], 'col2': [-4,6,2], 'col3': ['p','q','r']}
>>> rec_set_all = [rec_set1, rec_set2]
>>> df = pd.DataFrame.from_records(rec_set1)
>>> df
   col1  col2 col3
0     1     5    x
1     2     3    y
2     3     4    z
  1. 不是我所期望的。我应该使用什么追加功能?

  2. 有没有一种简单的单行方式从>>> df = df.append(rec_set2, ignore_index=True) >>> df col1 col2 col3 0 1 5 x 1 2 3 y 2 3 4 z 3 [5, 6, 7] [-4, 6, 2] [p, q, r] 创建整个数据帧的方法?

2 个答案:

答案 0 :(得分:3)

假设您从列表的字典列表开始,则可以通过使用列表理解将其转换为DataFrames列表来开始:

rec_set1 = {'col1': [1,2,3], 'col2': [5,3,4], 'col3': ['x','y','z']}
rec_set2 = {'col1': [5,6,7], 'col2': [-4,6,2], 'col3': ['p','q','r']}
... (etc.)
rec_setn = {...}
rec_set_all = [rec_set1, rec_set2,...,rec_setn]

df_list = [pd.DataFrame(r) for r in rec_set_all]

接下来,您可以使用简单的pd.concat方法将其全部组合到一个DataFrame中:

df_all = pd.concat(df_list)

如果要重置索引以使其连续而不是0、1、2、0、1,2等,则可以使用该索引从0开始对它们全部重新编号:

df.reset_index(inplace=True,drop=True)

您的示例的结果将是:

    col1 col2 col3
0    1    5     x
1    2    3     y
2    3    4     z
3    5   -4     p
4    6    6     q
5    7    2     r

编辑

包括AMC评论中的信息,可以将其写成单行:

df = pd.concat([pd.DataFrame(r) for r in rec_set_all], ignore_index = True)

答案 1 :(得分:0)

这也将起作用。只需将新字典附加为DataFrame。

rec_set1 = {'col1': [1,2,3], 'col2': [5,3,4], 'col3': ['x','y','z']}
rec_set2 = {'col1': [5,6,7], 'col2': [-4,6,2], 'col3': ['p','q','r']}
rec_set_all = [rec_set1, rec_set2]
df = pd.DataFrame(rec_set1)

# append as rec_set2 as a DataFrame
df.append(pd.DataFrame(rec_set2))