【问题标题】:Combine specific column from multiple dataframe合并来自多个数据框的特定列
【发布时间】:2021-03-07 09:44:49
【问题描述】:

我在列表符号中创建了一个股票符号列表,并尝试通过雅虎获取每只股票的数据,并为每只股票制作包含每日股票价格的 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 文件中的所有列都相似。我也尝试过加入而不是合并,但它仍然无法正常工作。

Date Adj Close
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

【问题讨论】:

  • merge 不会在适当的位置修改 df 所以你想要main_df = main_df.merge(df, how='outer')

标签: python pandas


【解决方案1】:

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

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

                                                               
    

【讨论】:

    猜你喜欢
    • 2019-07-20
    • 2019-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-07
    • 2022-11-23
    • 2012-02-04
    • 1970-01-01
    相关资源
    最近更新 更多