【问题标题】:Unstack/split dataframe and write parts/chunks of dataframe to multiple csv's assigned to keys取消堆叠/拆分数据帧并将数据帧的部分/块写入分配给键的多个 csv
【发布时间】:2018-08-08 05:33:42
【问题描述】:

问题

我正在读取与特定模式匹配的多个 csv,将它们连接成一个数据帧并在该帧内进行一些处理(例如,填充日期时间间隔、构建平均值等)。在下一步中,我尝试解开数据框,并将它们写入单独的 csv 文件(将它们命名为导入的文件 + 扩展名)到导入它们的同一目录。 串联处理后的数据帧如下所示:

                Datetime    Value
0    2017-03-03 12:15:00    2.3
1    2017-03-03 12:30:00    2.1
...
n    2017-12-19 12:15:00    5.3
0    2017-05-03 12:15:00    1.3
1    2017-05-03 12:30:00    3.1
...
m    2017-12-19 12:15:00    7.3
...

到目前为止我的代码:

import os
import glob
import pandas as pd

    pattern = "*whatever*.csv" 
    directory_path = "mypath"
    files = glob.iglob(directory_path + '/**/' + pattern, recursive=True)

    def get_files():
        dfs = (pd.read_csv(filename)
                for filename in files)
        df = pd.concat(dfs)

    def process_df():
     .... # do some processing
        return processed_df

    '''this part of code does basically what i want'''
    def write_to_csv()
        dict_ = {}
        for filename in files:
            dict_[file] = pd.read_csv(file)
        for file in dict_:
            with open(os.path.splitext(file)[0] + "_gaps_filled.csv", 'w') as f:
            dict_[filename].to_csv(f, sep=',', index=False, header=False)

def write_to_csv() 基本上确实想要我想要的未连接/处理的数据。

问题

如何拆分/取消堆叠连接的已处理数据帧,将正确的文件名分配给未堆叠/拆分的块并将其写入循环中的 csv 文件?

*想要的结果

将匹配的csv文件读入dataframe--->处理dataframe--->将处理后的chunk写入对应的csv文件名和目录

a.csv                  a   some data                              a_pro.csv
b.csv    to df------->     some data   process--->[]   to_csv-->  b_pro.csv
c.csv                       ...                                   c_pro.csv
                       b   some data 
                           some data
                       ...
                       c   some data
                           some data
                       ...

我的方法

我尝试设置键 (pd.concat(dfs, keys=filenames),以便我可以将文件名分配给连接数据框中的相应块。但是在我的def process_df() 函数中,我使用了groupby 方法,所以键会“丢失”。

【问题讨论】:

    标签: python python-3.x pandas dataframe export-to-csv


    【解决方案1】:

    一个透明的解决方案是在处理过程中简单地添加一个带有文件名的列。

    然后,当您要输出到单独的文件时,只需按文件名过滤并相应地输出即可。

    您的代码可能如下所示:

    dfs = {i: pd.read_csv(i).assign(filename=i) for i in filenames}
    df = pd.concat(dfs.values(), ignore_index=True)
    
    # do your processing here
    
    for k in filenames:
        df[df['filename'] == k].drop('filename', 1).to_csv(k+'pro', index=False)
    

    【讨论】:

      猜你喜欢
      • 2018-11-29
      • 2011-08-04
      • 2013-11-16
      相关资源
      最近更新 更多