导入多个Excel文件并合并到数据框中

ql3eal8s  于 2022-11-26  发布在  其他
关注(0)|答案(2)|浏览(145)

我试图从一个文件夹中导入许多Excel文件(大约400个)到一个数据框中,但我似乎遇到了错误。
我想从我的文件夹的文件是名称文件名后面跟一个日期-“filename_yyyy_mm_dd.xlsx”。
我想保留标题,因为文件的不同日期都有相同的列。
我目前的代码是:

import glob
import pandas as pd
import os

path = r"C:\Users\..."

my_files = glob.glob(os.path.join(path, "filename*.xlsx"))

file_li = []

for filename in my_files:
    df = pd.read_excel(filename, index_col=None, header=1)
    file_li.append(df)
    
frame = pd.concat(file_li, axis=0, ignore_index=True)

当我调用我的框架时,我没有得到任何响应?我调用文件名的方式是否有什么错误?
更新:
我的Excel文件如下所示:
| 第1列|第2栏|第三栏|第四栏|第五栏|第六列|第七栏|第八列|第九栏|第十列|第十一列|第十二列|第十三栏|第十四栏|
| - -|- -|- -|- -|- -|- -|- -|- -|- -|- -|- -|- -|- -|- -|
| 日期|SREC-MD系统|SREC系统|二月二十五日|多数据交换|F级||八十五|第0页|第0页|小行星8086|2025年2月25日|小行星20107||
具有大约300-400行。
我的输出捕获了14列,但它添加了很多列,因为执行frame.info()显示我有922列。
更新二:

t5zmwmid

t5zmwmid1#

很难解释为什么会出现额外的列,但可以尝试以下方法:

import glob
import pandas as pd
import os

path = r"C:\Users\..."

my_files = glob.glob(os.path.join(path, "filename*.xlsx"))

file_li = []

for filename in my_files:
    df = pd.read_excel(filename, index_col=None, header=None)
    file_li.append(df)
    
frame = (
            pd.concat(file_li, axis=0, ignore_index=True)
                .dropna(how="all") #to get rid of the eventual extra rows abobe each header
                .drop_duplicates() #to get rid of the cumulated duplicated headers
                .T.set_index(0).T #to make the first row as header of the dataframe
        )

但是,我建议您检查一下frame中是否有与您的电子表格相比缺少的行。

zkure5ic

zkure5ic2#

如果不使用concat,您可以尝试将文件读入df,然后使用mode='a'将它们附加到一个组合的csv中,然后读取组合的csv。

for filename in my_files:
       df = pd.read_excel(filename, index_col=None, header=1)
       df.to_csv('combined.csv', mode='a', header=False)

df = pd.read_csv('combined.csv')

相关问题