使用python或pandas合并多个文件

2024-06-06 19:42:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有多个文件(最多20个或更多)要根据特定条件合并。以下是三个文件示例:

File1           
ID  Type    Condition   Colour
113884  M   Good    Green
123456  M   Good    Blue
178101  U   Good    Yellow
245645  U   Good    Red
256178  X   Fair    Green
803989  X   Poor    Red

File2           
ID  Type    Condition   Colour
113884  M   Good    Green
123456  M   Good    Blue
172221  M   Poor    Red
178101  U   Good    Yellow
256178  X   Fair    Green

File 3          
ID  Type    Condition   Colour
113884  M   Good    Green
123456  M   Good    Blue
172221  M   Poor    Red
178101  U   Good    Yellow
178101  U   Good    Yellow
256178  X   Fair    Green
286762  Q   Good    Purple

我想在这些文件中提取和合并类似的信息,如下面所需的输出。在所有文件中,任何带有“Type”M和Q的行都会与它们的ID一起提取,因此,在输出文件中,如果ID和类型是否包含在文件中,则文件名将变成表示“yes”或“no”的字段列。在

所需输出(.csv):

^{pr2}$

以下是我的不足尝试:

import os, glob

all_line =[]
for file in golob.glob('*.txt'):
    infile = open('file', 'r')
    for line in file:
        line=line.strip.split('\t')
        if line[1]=='M' or line[1]=='Q':
            all_line.append(line)

我不知道如何使用python或pandas来实现这一点。有人能帮忙吗?谢谢。在


Tags: 文件idfairtypelinegreenbluered
1条回答
网友
1楼 · 发布于 2024-06-06 19:42:43

你可以这样做:

import os
import glob
import pandas as pd

files = glob.glob(r'D:\temp\.data\File*.csv')

def merge_files(files, **kwargs):
    dfs = []
    for f in files:
        dfs.append(
            pd.read_csv(f, delim_whitespace=True, usecols=['ID','Type'])
              .query("Type in ['M','Q']")
              .drop_duplicates()
              .assign(col=0)
              .rename(columns={'col':os.path.splitext(os.path.basename(f))[0]})
              .set_index(['ID','Type'])
        )
    return pd.concat(dfs, axis=1).notnull()


result = merge_files(files).reset_index()
print(result)

输出:

^{pr2}$

相关问题 更多 >