gpt4 book ai didi

python - Pandas .join 无法合并 S&P500 股票数据

转载 作者:行者123 更新时间:2023-12-01 02:50:36 24 4
gpt4 key购买 nike

我正在关注 PythonProgramming.net 上的财务教程,当我尝试将多个数据帧合并为一个大型数据帧时遇到了问题。我创建了一个函数来执行此操作:

def compile_data():
with open ("sp500tickers.pickle", "rb") as f:
tickers = pickle.load(f)

main_df = pd.DataFrame()

for count,ticker in enumerate(tickers):
try:
df = pd.read_csv('stock_dfs/{}.csv'.format(ticker))
df.set_index('Date', inplace=True)
df.rename(columns={'Close':ticker}, inplace=True)
df.drop(['Open','High','Low','Volume'], 1, inplace=True)
if main_df.empty:
main_df = df
else:
main_df.join(df, how='outer')
print(main_df.head())
if count % 10 == 0:
print(count)
except Exception:
pass

print(main_df.head())
main_df.to_csv('sp500joinedcloses.csv')

(我在上面的代码中使用 try/except 的原因是因为我有 S&P500 的所有代码的列表,但无法从 Google Finance API 获取所有这些代码的数据......所以这样,如果它试图找到我没有的 csv,它仍然会合并我有的 csv,而不会抛出错误。)

当我运行此函数时,它会创建一个名为 sp500joinedcloses.csv 的 CSV,但它仅包含一个股票代码(即 ABBV)的数据。我知道它正在正确地迭代股票代码,因为如果我在 for 循环中添加 print(ticker) ,则会打印所有正确的股票代码。

还值得注意的是,ABBV 并不是我拥有的第一个应包含在数据框中的 csv。他们应该有一个文件的第一个代码是 AAPL,然后是 ABBV。不知道为什么它似乎跳过了 AAPL。

如果有任何帮助,我将不胜感激。我是 pandas 的初学者,真的很想学习有关它的一切。

最佳答案

IIUC:

您不想使用join,而且如果您从空数据帧开始,您无论如何也不能使用。使用 pd.concat 代替:

main_df = pd.concat([main_df, df], axis=1)

但是,我建议用它来替换您的整个过程:

def read_file(ticker):
df = pd.read_csv('stock_dfs/{}.csv'.format(ticker)).set_index('Date')
return df.Close.rename(ticker)

with open ("sp500tickers.pickle", "rb") as f:
tickers = pickle.load(f)

main_df = pd.concat([read_file(t) for t in tickers], axis=1)

关于python - Pandas .join 无法合并 S&P500 股票数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44834068/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com