我根据特定条件合并多个文件(最多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和类型包含在文件中。
必需输出(.csv):
ID Type File 1 File2 File3
113884 M Yes Yes Yes
123456 M Yes Yes Yes
172221 M No Yes Yes
286762 Q No No Yes
这是我的不充分尝试:
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来做到这一点。有人可以帮忙吗?谢谢。
答案 0 :(得分:3)
IIUC你可以这样做:
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)
输出:
ID Type File1 File2 File3
0 113884 M True True True
1 123456 M True True True
2 172221 M False True True
3 286762 Q False False True