我有6个excel文件,每个文件包含1到3个电子表格。我想把它们上传到pandas数据框中,然后对它们做一些数据清理。我的问题是,我怎么能把这些excel文件转换成一个数据帧在熊猫?
我试图打开一个excel文件,有多个表到数据框架在熊猫,但不能这样做吗?
您必须使用pd.read_excel
。在这里查看您问题的答案:
对同一工作簿的多个工作表使用Pandas来pd.read_excel()
您也可以查看原始来源:
pandas.read_excel
我还有一个excel文件,第一个工作表有17,000行,第二个工作表有3,000行,两个工作表的列是相同的。第一页的名称是"1";第二张纸的名字是"2"。这里我展示了如何分别阅读和一起阅读。
import pandas as pd
df1 = pd.read_excel('file.xlsx',sheet_name = '1')
df2 = pd.read_excel('file.xlsx',sheet_name = '2')
df3 = pd.read_excel('file.xlsx',sheet_name = ['1','2'])
df4 = pd.concat(df3, axis=0, ignore_index=True)
print('df1:',len(df1))
print('df2:',len(df2))
print('df3:',len(df3))
print('df4:',len(df4))
输出:
df1: 17000
df2: 3000
df3: 2
df4: 20000
使用sheet_name=None参数返回一个字典,可以使用字典推导来迭代该字典,以创建文件名作为键和数据帧作为值的映射。最后对映射值运行列表推导,并将所有dfs连接在一起。
from pathlib import Path
import pandas as pd
def concat_all_sheets_in_all_files(path: str) -> pd.DataFrame:
files = list(Path(path).rglob("*.xlsx"))
dfs_mapping = {Path(file).stem: pd.concat(pd.read_excel(file, sheet_name=None)) for file in files}
return pd.concat([df for _, df in dfs_mapping.items()]).reset_index(drop=True)
file_path = "path/to/all/excel/files/"
final_df = concat_all_sheets_in_all_files(path=file_path)
print(final_df)