您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python – 将多个未对齐的数据帧合并为单个pandas数据帧

5b51 2022/1/14 8:20:44 python 字数 2863 阅读 471 来源 www.jb51.cc/python

我有多个数据框架与股票价格,我想要对齐到一个数据框架,其中只包含所有股票的收盘价.我希望所有数据框中的所有日期都出现在日期列(索引)和“NA”中,以防该日期的股票没有收盘价.两个数据帧(df1和df2)的示例:In [5]: df1 Out[5]: Open High Low Close Date1 2012-01-05

概述

我有多个数据框架与股票价格,我想要对齐到一个数据框架,其中只包含所有股票的收盘价.

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

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

In [5]: df1
Out[5]:
            Open   High   Low    Close
Date1
2012-01-05  22.00  22.66  23.11  24.04
2012-01-04  24.04  23.80  23.08  22.16
2012-01-03  22.16  21.27  20.42  21.24
2012-01-01  21.24  22.30  22.52  22.30

In [7]: df2
Out[7]:
             Open   High    Low  Close
Date1
2012-01-07  23.00  21.66  25.11  21.04
2012-01-06  22.00  22.66  23.11  24.04
2012-01-04  24.04  23.80  23.08  22.16
2012-01-02  22.16  21.27  20.42  21.24
2012-01-01  21.24  22.30  22.52  22.30

现在我能做到

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]比喻说)?

在此先感谢您的亲切问候!
短剑

dflist = [df1,df2,df3,df4,df5,df6,df7,df8]

那么下面的代码应该做你正在寻找的东西:

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理解看起来像这样:

{"df{0:d}.Close".format(idx+1): df["Close"] for idx,df in enumerate(dflist)}

总结

以上是编程之家为你收集整理的python – 将多个未对齐的数据帧合并为单个pandas数据帧全部内容,希望文章能够帮你解决python – 将多个未对齐的数据帧合并为单个pandas数据帧所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶