0
場景:我把這個小小的Frankenstein代碼(來自SO用戶的一些很棒的幫助)放在一起,從excel文件中獲取數據並放入熊貓數據框中。從xlsx讀取數據到Pandas數據框
我在做什麼:我試圖從可能包含一個或多個數據工作表的文件中獲取數據。之後,我打算相應地組織數據框。例如:
date1 identifier 1 bid ask
date1 identifier 2 bid ask
date1 identifier 3 bid ask
date2 identifier 1 bid ask
date2 identifier 3 bid ask
date3 identifier 4 bid ask
date3 identifier 5 bid ask
OBS1:每個文件可以有值「投標」,「詢問」或兩者,在每一個單獨的工作表。
Obs2:不同文件的標識符和日期可能相同,也可能不同。
我到目前爲止所做的:我目前的代碼讀取文件和每個工作表。如果符合條件,則附加到特定的數據幀。然後它修復了列標題。
Issue:當我的代碼運行時,出於某種原因它會產生兩個空的數據框。
問題:如何計算不同的工作表並將相應的值(對上述結構)輸出到數據框?
目前代碼:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import glob, os
import datetime as dt
from datetime import datetime
import matplotlib as mpl
from openpyxl import load_workbook
directory = os.path.join("C:\\","Users\\DGMS\\Desktop\\final 2")
list_of_dfs = []
dfbid = pd.DataFrame()
dfask = pd.DataFrame()
for root,dirs,files in os.walk(directory):
for file in files:
f = os.path.join(root, file)
wb = load_workbook(f)
for sheet in wb.worksheets:
if sheet == "Bid":
dfbid = pd.concat([dfbid, pd.read_excel(f, "Bid")])
for i in range(1,len(dfbid.columns)):
dfbid.columns.values[i] = pd.to_datetime(dfbid.columns.values[i])
elif sheet == "Ask":
dfask = pd.concat([dfask, pd.read_excel(f, "Ask")])
for i in range(1,len(dfask.columns)):
dfask.columns.values[i] = pd.to_datetime(dfask.columns.values[i])
據我所知'concat'與發電機表達的作品。也許不是所有版本? –
我添加了一些代碼來測試這最後一步 –
很多感謝您的答案。關於連接過程的一個問題:假設我的一些文件有一些重複的列(日期)或重複的行(標識符),我的連接目標是將任何新列添加到結尾(所有列的左側)和任何新行到最後(底部)。如果已經有一列,它只是添加一個新行,如果已經有該行,它只是添加到新列。連接程序能自動執行該操作嗎?或者我需要一次連接一個軸? – DGMS89