我有一個代碼可以讀取目錄中的多個檔案,每個 excel 檔案都有超過 10 張。之后,我需要排除一些作業表的每個檔案和提取的其他作業表。
我得到了所有需要的資料,但問題是即使我使用了 concat,excel 中的每張作業表都創建了新的資料框,所以當我將它保存到 json 時,只保存每個檔案的最后一個資料框而不是整個資料。
這是我的代碼:
excluded_sheet = ['Sheet 2','Sheet 6']
for index, xls_path in enumerate(file_paths):
data_file = pd.ExcelFile(xls_path)
sheets = [ sheet for sheet in data_file.sheet_names if sheet not in excluded_sheet ]
for sheet_name in sheets:
file = xls_path.rfind(".")
head, tail = os.path.split(xls_path[1:file])
df =pd.concat([pd.read_excel(xls_path, sheet_name=sheet_name, header=None)],ignore_index=True)
df.insert(loc=0, column='sheet name', value=sheet_name)
pd.DataFrame(df.to_json(f"{json_folder_path}{tail}.json", orient='records',indent=4))
我沒有使用sheet_name=None因為我需要讀取作業表名稱并添加到列值。
我的資料框的資料狀態:

我得到了很多 DF,因為每張紙都會創建新的 DF,而不是 2 個 DF,因為我在目錄中有 2 個檔案。謝謝大家幫助。
uj5u.com熱心網友回復:
您可以使用串列推導將所有作業表名稱連接到一個 DataFrame:
...
...
sheets = [ sheet for sheet in data_file.sheet_names if sheet not in excluded_sheet ]
file = xls_path.rfind(".")
head, tail = os.path.split(xls_path[1:file])
dfs = [pd.read_excel(xls_path,sheet_name=sheet_name,header=None) for sheet_name in sheets]
df =pd.concat(dfs,keys=sheets)
df = df.reset_index(level=0, drop=True).rename_axis('sheet name').reset_index()
pd.DataFrame(df.to_json(f"{json_folder_path}{tail}.json", orient='records',indent=4))
或者創建dfs每個回圈附加 DataFrames 的幫助串列,外部回圈使用concat:
...
...
sheets = [ sheet for sheet in data_file.sheet_names if sheet not in excluded_sheet ]
dfs = []
for sheet_name in sheets:
file = xls_path.rfind(".")
head, tail = os.path.split(xls_path[1:file])
df = pd.read_excel(xls_path, sheet_name=sheet_name, header=None)
df.insert(loc=0, column='sheet name', value=sheet_name)
dfs.append(df)
df1 = pd.concat(dfs,ignore_index=True)
pd.DataFrame(df1.to_json(f"{json_folder_path}{tail}.json", orient='records',indent=4))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/493223.html
標籤:Python python-3.x 熊猫 数据框
下一篇:這個按大小分組的行為是否正確?
