如何从包含每个键行列表的字典列表中创建数据框? 请检查以下示例:
./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
不是我所期望的。我应该使用什么追加功能?
有没有一种简单的单行方式从>>> 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]
创建整个数据帧的方法?
答案 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))