【问题标题】:Excel file overwritten instead of concat - Python - PandasExcel文件被覆盖而不是concat - Python - Pandas
【发布时间】:2019-03-14 18:49:03
【问题描述】:

我正在尝试使用以下脚本将其中的所有 excel 文件和工作表联系为一个。它有点工作,但是每个文件都会覆盖 excel 文件 c.xlsx,所以只有最后一个 excel 文件被连接不知道为什么?

import pandas as pd
import os
import ntpath
import glob

dir_path = os.path.dirname(os.path.realpath(__file__))
os.chdir(dir_path)
cdf = None
for excel_names in glob.glob('*.xlsx'):
    print(excel_names)
    df = pd.read_excel(excel_names, sheet_name=None, ignore_index=True)
    cdf = pd.concat(df.values())
    cdf.to_excel("c.xlsx", header=False, index=False)

【问题讨论】:

    标签: python excel pandas


    【解决方案1】:

    想法是在列表理解中创建DataFrames 的列表,但是因为使用orderdict 是必要的concat 在循环中然后再次concat 用于一个大的最终DataFrame:

    cdf = [pd.read_excel(excel_names, sheet_name=None, ignore_index=True).values() 
           for excel_names in glob.glob('files/*.xlsx')]
    
    df = pd.concat([pd.concat(x) for x in cdf], ignore_index=True)
    #print (df)
    
    df.to_excel("c.xlsx", index=False)
    

    【讨论】:

    【解决方案2】:

    我刚刚测试了下面的代码。它将文件夹中所有 Excel 文件中的数据合并到一个单独的 Excel 文件中。

    import pandas as pd
    import numpy as np
    
    import glob
    glob.glob("C:\\your_path\\*.xlsx")
    
    all_data = pd.DataFrame()
    for f in glob.glob("C:\\your_path\\*.xlsx"):
        df = pd.read_excel(f)
        all_data = all_data.append(df,ignore_index=True)
    print(all_data)
    df = pd.DataFrame(all_data)
    df.shape
    df.to_excel("C:\\your_path\\final.xlsx", sheet_name='Sheet1')
    

    【讨论】:

    • 是否也包括其中一些excel文件有多个工作表的情况?
    • 我已将代码修复为不会在每次迭代时都执行只需要在最后完成的事情。如果all_data 已经是DataFrame,仍然不知道为什么需要df = pd.DataFrame(all_data)——看起来多余。
    【解决方案3】:

    我使用下面的脚本让它工作,该脚本使用@ryguy72 的答案,但适用于所有工作表以及标题行。

    import pandas as pd
    import numpy as np
    import glob
    
    all_data = pd.DataFrame()
    for f in glob.glob("my_path/*.xlsx"):
        df = pd.read_excel(f, sheet_name=None, ignore_index=True)
        cdf = pd.concat(df.values())
        all_data = all_data.append(cdf,ignore_index=True)
    print(all_data)
    df = pd.DataFrame(all_data)
    df.shape
    df.to_excel("my_path/final.xlsx", sheet_name='Sheet1')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-20
      • 1970-01-01
      • 2019-07-02
      • 2016-06-04
      • 2016-06-19
      • 2014-03-21
      相关资源
      最近更新 更多