【问题标题】:Concatenate two data frames with the same name from different directories via Python通过Python连接来自不同目录的两个同名数据框
【发布时间】:2020-02-01 13:36:37
【问题描述】:

我在不同目录中有两个文件夹,其中包含同名的 excel 文件。 我需要连接 excel 文件,而不是工作表,因为每个文件都有一张同名的工作表。 例如:

d1 包含 A、B、C 文件

d2包含A、B、E、F文件

输出应包含两个文件,连接 d1 中的 A 和 d2 中的 A 的结果,以及连接 d1 中的 B 和 B 中的 B 的结果d2.

如果d1和d2没有同名文件,则不会有输出。

第一个数据框有多行,但第二个数据框有一行。当我运行此代码时,它会将第二个数据帧视为标头,当我将标头设置为 false 时,它​​不再考虑它。

import glob
import numpy as np

file_d1 = glob.glob(d1 + "/*.xlsx")
file_d2 = glob.glob(d2 + "/*.xlsx")
i=0
for file_d1 in glob.glob(d1 + "/*.xlsx"):
    fileName_d1 = os.path.splitext(os.path.splitext(os.path.basename(file_d1))[0])[0]
    for file_d2 in glob.glob(d2 + "/*.xlsx"):
        fileName_d2 = os.path.splitext(os.path.splitext(os.path.basename(file_d2))[0])[0]
        if fileName_d1 == fileName_d2:
            i+=1
            fileName_1=d1+'/'+fileName_d1+'.xlsx'
        df1 = pd.read_excel(fileName_1, header=0, index= False)
        fileName_2=d2+'/'+fileName_d2+'.xlsx'
        df2 = pd.read_excel(fileName_2, header=0, index= False)
        print(fileName_1)
        print(fileName_2)
        df = pd.DataFrame(np.concatenate([df1.values, df2.values], axis=0), columns=df2.columns)
df.to_excel('C:/Users/khouloud.ayari/Desktop/FinalResult/output'+str(i)+'.xlsx', index = True, header=False)

我应该怎么做才能获得正确的输出,即(第一个数据帧 + 第二个数据帧)而不是相反?

当我连接这两个文件时,“nbr de Reboot”消失了,“nbr de km parcourus”被认为是标题df.to_excel('C:/Users/khouloud.ayari/Desktop/FinalResult/output'+str(i)+'.xlsx', index = False, header=True)

通过控制台输出

1   nbr de Kilomètres parcourus  1
0       Passage en mode privé  1
1      Passage en mode public  2

输出.xlsx

预期输出: A和B是三个不同的文件

PS:我使用的是 Python 3.7(Spyder)

【问题讨论】:

  • 目录结构如何查找这两者以及它们的工作表结构?
  • 目录只包含excel文件(这就是你说的目录结构吗?)
  • 是您要用于对齐的文件名,还是其中的工作表名称?
  • 所以说 d1 中有 N 个文件,(称为任何文件)有些文件有 A、B、C 和 d2 中有 M 个文件,有些文件有称为 (A、D、E) 等的文件。 .. 组合输出是多少?
  • 文件名。我需要连接具有相同名称的文件(来自不同的目录)

标签: python-3.x dataframe merge concatenation


【解决方案1】:

我的目标是连接两个位于不同目录的同名 excel 文件,但我没有这样做,因为在此过程中丢失了一些数据,所以我在我的 excel 文件中添加了标题并运行以下代码:

import os 
import pandas as pd

d2 = "C:/Users/khouloud/Desktop/d2"
d1 = "C:/Users/khouloud/Desktop/d1"

import glob
import numpy as np
file_d1 = glob.glob(d1 + "/*.xlsx")
file_d2 = glob.glob(d2 + "/*.xlsx")
i=0
for file_d1 in glob.glob(d1 + "/*.xlsx"):
    fileName_d1 = os.path.splitext(os.path.splitext(os.path.basename(file_d1))[0])[0]
    for file_d2 in glob.glob(d2 + "/*.xlsx"):
        fileName_d2 = os.path.splitext(os.path.splitext(os.path.basename(file_d2))[0])[0]
        if fileName_d1 == fileName_d2:
            i+=1
            fileName_1=d1+'/'+fileName_d1+'.xlsx'
            df1 = pd.read_excel(fileName_1, header=0, index= False)
            fileName_2=d2+'/'+fileName_d2+'.xlsx'
            df2 = pd.read_excel(fileName_2, header=0, index= False)
            df = pd.DataFrame(np.concatenate([df1.values, df2.values]), columns=df2.columns)
            print('**********************************************')
            print('1',df)
            print('**********************************************')
            df.to_excel('C:/Users/khouloud/Desktop/FinalResult/output'+str(i)+'.xlsx', index = False, header=False)

【讨论】:

    猜你喜欢
    • 2021-08-17
    • 2014-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多