我在PythonProgramming.net上關注財務教程,並且在嘗試將幾個數據框合併到一個大型數據框時遇到了問題。我創建了一個函數來做到這一點:Pandas .join無法將S&P500股票數據結合起來
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 /除了在上面的代碼原因是因爲我把所有的行情對於S & P500的名單,但沒能從Google Finance API抓取所有人的數據......如此一來,如果它試圖找到我沒有的csv,它仍會將我所擁有的數據合併在一起,而不會產生錯誤。)
當我運行這個函數時,它會創建一個名爲sp500joinedcloses.csv的CSV,但它只包含一個代碼的數據,即ABBV。我知道它正在迭代代碼,因爲如果我在for循環中添加一個print(ticker),所有正確的代碼都會被打印出來。
還值得注意的是,ABBV不是我應該包含在數據框中的第一個csv。他們首先應該有一個文件是AAPL,然後是ABBV。不知道爲什麼它似乎跳過AAPL。
我將不勝感激任何幫助。我是熊貓的初學者,真的很想學習一切。
感謝您的見解。如果main_df.empty:main_df = df,那麼在這種情況下會加入不起作用,因爲我有這行: –
@BenSprenger'main_df = main_df.join(df,how ='outer')'可能會工作...試試吧 – piRSquared
@BenSprenger我仍然會推薦我的流程。 – piRSquared