首页 > 解决方案 > 合并来自多个数据框的特定列

问题描述

我在列表符号中创建了一个股票符号列表,并尝试通过雅虎获取每只股票的数据,并为每只股票制作包含每日股票价格的 csv 文件。

for ticker in symbol:

if not os.path.exists('F&OStocks/{}.csv'.format(ticker)):
    df = web.DataReader(ticker+'.NS', 'yahoo', start, end)
    df.reset_index(inplace=True)
    df.set_index('Date', inplace=True)
    df.to_csv('F&OStocks/{}.csv'.format(ticker))
else:
    print('Already have {}'.format(ticker))

上面的代码工作得很好,我能够为每只股票制作 csv 文件。接下来,我试图通过从所有 csv 文件中读取数据来创建一个包含所有股票收盘价的新数据框。我使用下面的代码来做到这一点。

main_df = pd.DataFrame()
for ticker in symbol:
    df = pd.read_csv('F&OStocks/{}.csv'.format(ticker))
    df.set_index('Date', inplace=True)
    
    df.rename(columns = {'Adj Cose': ticker}, inplace=True)
    df.drop(['Open','High','Low','Close','Volume'], 1, inplace=True)
     
    if main_df.empty:
        main_df = df
    else:
        main_df.merge(df, how='outer')

print(main_df.head())
main_df.to_csv('F&Ostocks_joined_closes.csv')

我只在 main_df 上获得了第一家公司的收盘价,而只有头部收盘价(如下表所示)。每个 csv 文件中的所有列都相似。我也尝试过加入而不是合并,但它仍然无法正常工作。

日期 调整关闭
2015-02-02 138.406876
2015-02-03 142.602432
2015-02-04 140.155045
2015-02-05 136.961731
2015-02-06 136.215836

标签: pythonpandas

解决方案


假设您的数据框中剩下的就是调整后的收盘价,在您删除其他列后,您可以将 df 转换为系列并在每个循环中将其分配给 main_df:

if not df.empty:
    main_df[ticker] = pd.Series(df)

                                                               
    

推荐阅读