python - 使用 pandas(和 glob?)合并目录中的大量(csv)数据文本文件

标签 python arrays csv pandas glob

我有许多独立的 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。

最佳答案

你可以这样做:

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

关于python - 使用 pandas(和 glob?)合并目录中的大量(csv)数据文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37080132/

相关文章:

Python - 每分钟点击次数实现?

python - 具有离散颜色的 2D 数组不适用于一个中间值

php - 如何在数组的开头和结尾添加缺失的日期?

php - 格式化数据库中的日期以在 Highcharts 中使用

javascript - 从 CSV 动态创建对象

python - 将三个 csv/xls 文件拉入数据帧会导致找不到其中一个

python - 根据您在函数中指定的扩展名和文件夹获取文件数量

python - 是什么改变了这个 pandas 代码中的日期类型?

arrays - 有人能给我解释一下《算法设计手册》中的这一段是什么意思吗?这让我很困惑

c++ - 无法为数组指定显式初始值设定项