【问题标题】:Use pandas (and glob?) to merge numerous (csv) data text files from a directory使用 pandas(和 glob?)合并目录中的大量(csv)数据文本文件
【发布时间】:2016-09-01 23:38:01
【问题描述】:

我有许多单独的 X、Y(整数)列数据的仪器文件。所有数组都是相同的维度。每个文件的 X 列相同,Y 列编号不同。如果可能,我想将连续文件的 Y 列连接到第一个文件并写入一个包含第一个 X 和多个 Y 的新单个大数组?像这样:

file1=X1 Y1 file2=X1 Y2 file3=X1 Y3... 新文件结果应该是:X1 Y1 Y2 Y3...

一直在研究以下方面的变化:

import pandas
data = pandas.read_csv('file1.csv') 
# print(data) returns the 1st file array ok

需要打开并循环遍历连续文件以将 Y 列连接到 file1。

【问题讨论】:

    标签: python arrays csv pandas glob


    【解决方案1】:

    你可以这样做:

    import os
    import glob
    import pandas as pd
    
    def get_merged_csv(flist, **kwargs):
        return pd.concat([pd.read_csv(f, **kwargs).set_index('X') for f in flist], axis=1).reset_index()
    
    path = 'C:/Users/csvfiles'
    fmask = os.path.join(path, '*mask*.csv')
    
    df = get_merged_csv(glob.glob(fmask))
    

    为了命名您的Y 列,例如Y1Y2 等:

    cols = ['{0[0]}{0[1]}'.format(t) for t in zip(df.columns[1:], range(1, len(df.columns)))]
    df.columns = df.columns.tolist()[:1] + cols
    

    测试数据:

    a.csv:

    X,Y
    1,11
    2,12
    3,13
    

    b.csv:

    X,Y
    1,21
    2,22
    3,23
    

    c.csv:

    X,Y
    1,31
    2,32
    3,33
    

    测试:

    In [215]: df = get_merged_csv(glob.glob(fmask))
    
    In [216]: df
    Out[216]:
       X   Y   Y   Y
    0  1  11  21  31
    1  2  12  22  32
    2  3  13  23  33
    
    In [217]: cols = ['{0[0]}{0[1]}'.format(t) for t in zip(df.columns[1:], range(1, len(df.columns)))]
    
    In [218]: cols
    Out[218]: ['Y1', 'Y2', 'Y3']
    
    In [219]: df.columns = df.columns.tolist()[:1] + cols
    
    In [220]: df
    Out[220]:
       X  Y1  Y2  Y3
    0  1  11  21  31
    1  2  12  22  32
    2  3  13  23  33
    

    【讨论】:

    • 嘿 MaxU,这很好用!!!我用它在几秒钟内构建了一个巨大的数据框。由于我对 Python 还很陌生,您对写出“df”的结果有什么建议吗?我也可以将 df 传递给 MatPlotLib 进行绘图吗?
    • @numpystack,关于写出结果 - 如果您的意思是性能,您可能需要阅读 this answer。关于 Matplotlib - 您必须指定要绘制的内容和方式
    猜你喜欢
    • 2016-03-16
    • 2020-02-22
    • 2020-02-23
    • 1970-01-01
    • 2017-02-19
    • 1970-01-01
    • 2020-02-27
    • 2019-11-25
    • 2019-07-18
    相关资源
    最近更新 更多