Python 将多个未对齐的数据帧合并到单个数据帧中

Python 将多个未对齐的数据帧合并到单个数据帧中,python,pandas,Python,Pandas,我有多个包含股票价格的数据框,我希望将这些数据框对齐到一个仅包含所有股票收盘价的数据框中 我希望所有数据框中的所有日期都出现在日期列(索引)和“NA”中,以防某只股票在该日期没有收盘价 具有两个数据帧(df1和df2)的示例: 现在我可以做了 In [8]: frame=pd.DataFrame({"df1.Close":df1["Close"], "df2.Close":df2["Close"]}) 结果如预期: In [9]: frame Out[9]: df1.C

我有多个包含股票价格的数据框,我希望将这些数据框对齐到一个仅包含所有股票收盘价的数据框中

我希望所有数据框中的所有日期都出现在日期列(索引)和“NA”中,以防某只股票在该日期没有收盘价

具有两个数据帧(df1和df2)的示例:

现在我可以做了

In [8]: frame=pd.DataFrame({"df1.Close":df1["Close"], "df2.Close":df2["Close"]})
结果如预期:

In [9]: frame
Out[9]:
            df1.Close  df2.Close
Date1
2012-01-01      22.30      22.30
2012-01-02        NaN      21.24
2012-01-03      21.24        NaN
2012-01-04      22.16      22.16
2012-01-05      24.04        NaN
2012-01-06        NaN      24.04
2012-01-07        NaN      21.04
对于动态数量的数据帧,我需要如何更改代码才能执行相同的操作? 现在,我有8个数据帧需要以这种方式对齐。有没有办法循环遍历数据帧列表并像上面那样对齐它们,而不是手动绑定数据帧名称(打个比方说,类似于df[0]到df[7])

提前感谢并致以亲切的问候!
Dirk

如果列表中有数据帧(实际的数据帧对象,我的意思是,不是它们的名称),看起来像这样:

dflist = [df1, df2, df3, df4, df5, df6, df7, df8]
{"df{0:d}.Close".format(idx+1): df["Close"] for idx, df in enumerate(dflist)}
然后,下面的代码应该完成您想要的功能:

frame = {}
for idx, df in enumerate(dflist):
    n = idx+1  # Since lists are 0-indexed
    name = "df{0:d}.Close".format(n)
    close = df["Close"]
    frame[name] = close
您可以通过dict理解更简洁地完成这项工作,但在示例代码中,为了便于理解,我更喜欢更明确地解释。作为参考,dict理解如下:

dflist = [df1, df2, df3, df4, df5, df6, df7, df8]
{"df{0:d}.Close".format(idx+1): df["Close"] for idx, df in enumerate(dflist)}

很酷,非常感谢!举个例子,我已经成功了一半。现在我如何使“dflist”动态化?我不知道我需要多少数据帧,所以我想我正在寻找一种方法来动态创建一些数据帧,然后使用您的代码。非常感谢你的帮助!只需使用标准的列表操作方法,如
append()
——例如,当您获得一个新的数据帧时,执行类似于
dflist.append(new_df)
的操作。我想我离它越来越近了。我现在将数据帧加载到dict中,其中键是股票的报价器,值是带有OHLC股票报价的数据帧。现在我有了一个包含8个键/值对的dict。剩下的问题是:如何通过迭代我的dict将数据帧合并成一个数据帧?如果你迭代一个dict,你会得到key:
for key in my_dict:print key
。但是dict还有一个
iteritems()
方法来生成
(key,value)
的元组,因此您可以在my_dict.iteritems()中对key,val执行
。请注意,在Python3中,
iteritems()
被重命名为
items()
,因此根据您是在Python2.x还是3.x上使用适当的名称。Python教程介绍了您要问的一些问题——您已经解决了吗?如果没有,可能对你有好处。根据您使用的是Python3.x还是2.x,转到或。