【问题标题】:Combining data from multiple excel files in python using pandas package使用pandas包在python中组合来自多个excel文件的数据
【发布时间】:2019-09-07 17:09:07
【问题描述】:

我正在尝试将具有不同日期的 excel 数据文件合并到一个文件中,以便我可以使用 pandas 包进行分析。我遇到了困难,因为这些文件是按日期命名的并且里面有多张纸。

这是用于分析日期并绘制各种参数(即温度、atm、GHI 等)到天数/小时/分钟数的作业

import pandas as pd
import glob

all_data = pd.DataFrame() #Creating an empty dataframe
for f in glob.glob("/Data-Concentrated Solar Power-NamPower/Arandis 2016/2016 01 January/*.xlsx"): #path to datafiles and using glob to select all files with .xlsx extension
    df = pd.read_excel(f)
    all_data = all_data.append(df,ignore_index=True)


【问题讨论】:

    标签: python excel python-3.x pandas data-analysis


    【解决方案1】:

    将每个文件DataFrame 附加到一个列表中,然后使用pandas.concat 将它们全部合并为一个DataFrame

    import pandas as pd
    import glob
    
    frames = []
    
    for f in glob.glob("/home/humblefool/Dropbox/MSc/MSc Project/Data-Concentrated Solar Power-NamPower/Arandis 2016/2016 01 January/*.xlsx"): #path to datafiles and using glob to select all files with .xlsx extension
        df = pd.read_excel(f).assign(file_name=f)
        # Add date column for sorting later
        df['date'] = pd.to_datetime(df.file_name.str.extract(r'(\d{4}-\d{2}-\d{2})', expand=False), errors='coerce')
        frames.append(df)
    
    all_data = pd.concat(frames, ignore_index=True).sort_values('date')
    

    【讨论】:

    • 是否有可能知道文件是如何根据日期添加的,以及如何使用 pandas 仅从第 17 行开始使用所有文件的标题命令?
    • 我已经更新了我的答案,这将包括一个包含数据框来自的文件的列
    • 我还意识到合并的文件没有按日期的时间顺序排列,当我将生成的文件转换为 csv 文件时,它会弄乱数据。关于如何做的任何想法?
    • 我现在不在办公桌前,但大约 30 分钟后可以为您调查一下
    • @Tonikami04 对延迟回复您表示歉意。 IIUC,您想从文件名中提取date 部分,以便您可以按该日期排序..?我已经更新了我的答案以添加一个date 列,使用.str.extractpd.to_datetime。希望这就是你要找的。​​span>
    【解决方案2】:

    您可以尝试以下方法吗:

    import os
    all_data = pd.DataFrame() #Creating an empty dataframe
    for f in glob.glob("/home/humblefool/Dropbox/MSc/MSc Project/Data-Concentrated Solar Power-NamPower/Arandis 2016/2016 01 January/*.xlsx"): #path to datafiles and using glob to select all files with .xlsx extension
        df = pd.ExcelFile(f).parse('Sheet1', skiprows=16)
        file_date = os.path.splitext(os.path.basename(f))[0].split('_')[1]
        df['file_date'] = pd.to_datetime(file_date)
        all_data = pd.concat([all_data, df])
    all_data  = all_data.set_index('file_date').sort_index()
    

    【讨论】:

    • 这确实有效。但是我有多确定这些文件是按照它们的日期组合在一起的?
    • 我已修改解决方案以跳过前 16 行。你现在可以检查了。
    • 我还意识到合并的文件没有按日期的时间顺序排列,当我将生成的文件转换为 csv 文件时,它会弄乱数据。关于如何做的任何想法?
    猜你喜欢
    • 1970-01-01
    • 2021-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-16
    • 2017-01-31
    • 1970-01-01
    • 2012-06-25
    相关资源
    最近更新 更多