gpt4 book ai didi

python - 导入多个Excel文件并合并到单个pandas df中,源名称为列

转载 作者:太空宇宙 更新时间:2023-11-03 20:09:50 25 4
gpt4 key购买 nike

我正在尝试将一堆 xlsx 文件合并到 python 中的单个 pandas 数据框中。此外,我想包括一列,列出每行的源文件。我的代码如下:

import pandas as pd
from pandas import ExcelWriter
from pandas import ExcelFile
import glob
import os

# get the path for where the xlsx files are
path = os.getcwd()
files = os.listdir(path)
files_xlsx = [f for f in files if f[-4:] == 'xlsx']

# create new dataframe
df = pd.DataFrame()

# read data from files and add into dataframe
for f in files_xlsx:
data = pd.read_excel(f, 'Sheet 1')
df['Source_file'] = f
df = df.append(data)

但是,当我查看“Source_file”列时,它列出了它读取的最终文件作为每行的名称。我花了比我应该花的时间更多的时间来尝试解决这个问题。我做错了什么?

最佳答案

在 for 循环中,您正在编写 df 的每次迭代,因此您只能返回最终文件,

您需要做的是事先删除一个列表并追加执行此操作,

既然你调用了 glob,那么我们也可以使用它。

files = glob.glob(os.path.join(os.getcwd()) + '\*.xlsx')
dfs = [pd.read_excel(f,sheet_name='Sheet1') for f in files]
df = pd.concat(dfs)

如果您也想将文件名添加到 df 中,

files = glob.glob(os.path.join(os.getcwd()) + '\*.xlsx')
dfs = [pd.read_excel(f,sheet_name='Sheet1') for f in files]
file_names = [os.path.basename(f) for f in files]
df = pd.concat(dfs,keys=file_names)

使用Pathlib模块(推荐Python 3.4+)

from pathlib import Path
files = [f for f in Path.cwd().glob('*.xlsx')]
dfs = [pd.read_excel(f,sheet_name='Sheet1') for f in files]
file_names = [f.stem for f in files]
df = pd.concat(dfs,keys=file_names)

或作为单行:

df = pd.concat([pd.read_excel(f) for f in Path.cwd().glob('*.xlsx')],keys=[f.stem for f in Path.cwd().glob('*.xlsx')],sort=False)

关于python - 导入多个Excel文件并合并到单个pandas df中,源名称为列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58774145/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com