使用 pandas(和 glob?)合并目录中的大量(csv)数据文本文件
Posted
技术标签:
【中文标题】使用 pandas(和 glob?)合并目录中的大量(csv)数据文本文件【英文标题】:Use pandas (and glob?) to merge numerous (csv) data text files from a directory 【发布时间】: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。
【问题讨论】:
【参考方案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
列,例如Y1
、Y2
等:
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 - 您必须指定要绘制的内容和方式以上是关于使用 pandas(和 glob?)合并目录中的大量(csv)数据文本文件的主要内容,如果未能解决你的问题,请参考以下文章
Pandas 和 glob:将文件夹中的所有 xlsx 文件转换为 csv – TypeError: __init__() got an unexpected keyword argument 'xf