我正在关注 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,它仍然会结合我拥有的那些而不会引发错误。)
当我运行这个函数时,它会创建一个名为 sp500joinedcloses.csv 的 CSV,但它只包含一个股票代码的数据,即 ABBV。我知道它正在正确地遍历代码,因为如果我在 for 循环中添加一个 print(ticker),所有正确的代码都会被打印出来。
还值得注意的是,ABBV 不是我拥有的第一个应该包含在数据框中的 csv。他们首先应该有一个文件的股票代码是 AAPL,然后是 ABBV。不知道为什么它似乎跳过了 AAPL。
我将不胜感激任何帮助。我是 pandas 的初学者,我真的很想学习关于它的一切。