首页 > 解决方案 > Python将具有不同时间戳的不同列表的列表转换为数据框

问题描述

我有一个大列表,其中通过 for 循环操作附加了不同的数据帧。现在 biglist 有不同的列表。其中一些子列表具有匹配的时间戳,而有些则没有。我想将此 biglist 转换为包含每个数据的数据框。我的代码:

biglist = 

[
                                                     column1
 11/09/2020 5:25:44 AM                                  36
 11/09/2020 5:34:55 AM                                  35
 11/09/2020 5:34:56 AM                                  36
 11/09/2020 5:39:36 AM                                  35
 11/09/2020 5:39:37 AM                                  36
 11/09/2020 6:29:02 PM                                  45
 11/09/2020 6:55:47 PM                                  45
 11/09/2020 6:59:41 PM                                  43
 11/09/2020 7:25:47 PM                                  43
 11/09/2020 7:30:58 PM                                  42
 [10 rows x 1 columns],
                                                 column2
 11/09/2020 9:37:47 AM                           11677
 11/09/2020 5:27:55 PM                           11677,
                                              column3
 11/09/2020 9:37:47 AM                     1.33108e+06
 11/09/2020 5:27:55 PM                     1.33108e+06,
                                                    Column4
 11/09/2020 6:23:25 AM                              0.972756
 11/09/2020 6:39:04 AM                               1.90602
 11/09/2020 6:45:10 AM                               2.41583
 11/09/2020 6:45:49 AM                               2.93376
 11/09/2020 6:49:13 AM                               3.83149
 11/09/2020 5:22:39 PM                               2.12865
 11/09/2020 5:25:28 PM                               3.15538
 11/09/2020 5:29:15 PM                               2.12897
 11/09/2020 5:47:06 PM                                1.1835
 11/09/2020 6:27:07 PM                              0.971422
 
 [10 rows x 1 columns]]
df = pd.concat(biglist)

目前的输出:

数据框基本上复制了列表中的所有索引。它实际上并没有产生一个单一的索引。相反,第一个列表索引和 column1 会首先出现,然后是第二个列表索引和 column2。相反,我期待一个包含所有索引和所有列的索引。某些列在没有数据时可能具有 NaN。

标签: pythonpandaslistdataframe

解决方案


改用pd.merge

df1 = pd.DataFrame([[1], [1], [4]], columns=['A'], index=['i1', 'i2', 'i3'])
df2 = pd.DataFrame([[2], [3], [6]], columns=['B'], index=['i1', 'i2', 'i4'])
biglist = [df1, df2]
final_df = biglist[0]
for df in biglist[1:]:
    final_df = final_df.merge(df, left_index=True, right_index=True, how='outer')
print(final_df)

      A    B
i1  1.0  2.0
i2  1.0  3.0
i3  4.0  NaN
i4  NaN  6.0

推荐阅读