Python 3.x 参照根据python中其他文件的公共信息过滤的文件创建文件
我有两个文本文件。file1有6列和2行,但file2有2列和5行,如以下示例所示: 文件1:Python 3.x 参照根据python中其他文件的公共信息过滤的文件创建文件,python-3.x,Python 3.x,我有两个文本文件。file1有6列和2行,但file2有2列和5行,如以下示例所示: 文件1: Code S1 S2 S3 S4 S5 X2019060656_12 4.068522 1889.299282 1547.771971 434.392935 4346.019078 X2019060657_05 1.318325 1290.142988 28
Code S1 S2 S3 S4 S5
X2019060656_12 4.068522 1889.299282 1547.771971 434.392935 4346.019078
X2019060657_05 1.318325 1290.142988 285.579601 73.329331 2222.198520
文件2:
Class group
X2019060656_12 A
X2019060657_05 A
X2019060658_04 A
X2019060659_03 A
X2019060660_08 A
我想根据file2的列类和file1中的列代码的交集对file2的子集进行过滤
这是预期输出:
Class group
X2019060656_12 A
X2019060657_05 A
为此,我用python编写了以下代码:
file1 = open("file1.txt", "r")
file2 = open("file2.txt", "r")
file1 = {}
keys1 = []
values1 = []
with open("file1.txt") as file1:
for line in file1.lines():
keys1.append(line[0])
values1.append(line[1])
dict_file1 = dict(zip(keys1, values1))
file2 = {}
keys2 = []
values2 = []
with open("file2.txt") as file2:
for line in file2.lines():
keys2.append(line[0])
values2.append(line[1])
dict_file2 = dict(zip(keys2, values2))
newlist = []
for item in dict_file1:
for item2 in dict_file2:
if item1 == item2:
new_list.append(line)
with open('new_file.txt', 'w') as f:
for i in new_list:
f.write("%s\n" % i)
但是输出文件与预期的输出不同。你知道如何修复它吗?你可以用熊猫这样做:
import pandas as pd
df1 = pd.read_csv("file1.txt",delim_whitespace=True)
df2 = pd.read_csv("file2.txt",delim_whitespace=True)
df2[df2['Class'].isin(df1['Code'])]
输出:
Class group
0 X2019060656_12 A
1 X2019060657_05 A
如果要导出到文件,请使用df2.to_csv我不是python方面的专家,但我想知道为什么变量file1和file2会在下面几行中被重新定义为file1={}和file2={}。