用相同的列和相同的索引连接许多熊猫数据帧

时间:2019-10-25 01:18:48

标签: python pandas dataframe

我有很多大数据框架,大约有7,000个。这些数据框是从1965年到2017年的股票价格。我使用第一列作为日期作为指数。还有另外三列:每天的低价,高价和数量。我循环访问所有这些对象,并且每次查看不同的日期窗口时都可以访问。例如从1965年到1970年。是否有任何方法可以将我的所有数据帧合并为一个?我想要的是每个日期都有的:低,高,成交量(含每种股票的名称)。这样会更有效率。一个重要的想法是某些股票缺少某些日期,因此每一行的行数都不相同。我在想类似包含所有日期所有股票价格的列表。这是我的数据: https://www.kaggle.com/borismarjanovic/price-volume-data-for-all-us-stocks-etfs/metadata

1 个答案:

答案 0 :(得分:0)

您可以读取第一个文件。重命名列以包含_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中获得的日期行应该是来自正在合并的两个数据帧的日期的并集,因此应该解决不是每个文件中的所有日期都不相同的问题。