【问题标题】:Concat a lot of panda data frames with same columns and same indexes连接大量具有相同列和相同索引的熊猫数据帧
【发布时间】:2020-02-21 08:40:26
【问题描述】:

我有很多大数据框,大约 7 千。这些数据框是从 1965 年到 2017 年的股票价格。我使用的第一列是日期作为索引。还有另外三列:每天的最低价、最高价和成交量。我正在循环访问所有这些,并且每次我查看不同的日期窗口时。例如从 1965 年到 1970 年。有没有办法将我的所有数据框合并为一个?我想要的是每个日期都有:低,高,每只股票的名称。那会更有效率。一个重要的想法是,对于某些股票,缺少某些日期,因此每个股票的行数都不相同。我正在考虑类似于包含所有日期的所有股票价格的列表。这是我的数据: https://www.kaggle.com/borismarjanovic/price-volume-data-for-all-us-stocks-etfs/metadata

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    您可以读取第一个文件。重命名列以包含 _pex

    df = pd.read_csv('/kaggle/input/Data/ETFs/pex.us.txt')
    renamed = ['Date']
    renamed += [str(col) + '_pex' for col in df.columns[1:]]
    df.columns = renamed
    

    然后您可以遍历文件,每次都给出从文件名中获得的股票名称的后缀。然后将其与原始数据框合并,如下所示:

    counter = 0
    for filename in os.listdir('/kaggle/input/Data/ETFs/'):
        if filename == 'pex.us.txt':
            continue
        name = (filename.split('.')[0])
        data = pd.read_csv('/kaggle/input/Data/ETFs/'+filename)
        renamed = ['Date']
        renamed += [str(col) + '_' + name for col in data.columns[1:]]
        data.columns = renamed
        df = pd.merge(df, data, on='Date', how='outer')
        counter +=1
        if counter == 5:
            break
    

    请注意,我设置了一个计数器,以便您停下来查看结果、进行更改并重试。 我在 kaggle 的在线笔记本上的时间用完了,然后当我说“重新连接”时,我得到了一个不同的目录,我不确定这是怎么回事,但希望你能明白。当您执行 how='outer' 连接时,您在合并的 df 中获得的日期行应该是来自被合并的两个数据框的日期的联合,这样应该可以解决每个文件中并非所有日期都相同的问题。

    【讨论】:

      猜你喜欢
      • 2020-11-27
      • 2017-01-31
      • 2017-04-06
      • 1970-01-01
      • 2015-07-17
      • 2018-12-25
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多