比较的2个文件的列,从第1列中的另一个文件的Python一个文件与值内替换在不同列中的值

问题描述 投票:2回答:1

我已经搜查,但没有找到类似的事情。我有一个空格分隔的TXT文件,并像下面制表符分隔的CSV文件

file1.txt(space delimited)
a b c d e f
b1 2 3 4 5 6
c7 8 9 3 2 1
d6 2 3 5 9 9

file2.csv (tab delimited)
f   G   h   s
d6  0.2 0.7 9
b1  3   8   2
c7  2   2   7

我需要在这两个文件,检查第1列。如果file2中任何列1个值等于file1中第1列的值,我想从文件2的4列中的值来替换在文件1的3列中的值和写入的全部内容到一个新文件。标题可以是任何东西,所以我将无法通过名字来称呼列。它并不一定要在熊猫和希望,有一个更好的方式,如果该文件是大

我当前的代码

import pandas as pd

f1 = pd.read_csv("f1.txt",delimiter =" ", header = None)
f2 = pd.read_csv("f2.csv",delimiter =" \t", header = 0)
with open("rr.csv", "w") as f:
    for i in f2.iloc[:, [0]].values:
        for x in f1.iloc[:, [0]].values:
            if i == x:
                f1.iloc[:, [2]].values = f2.iloc[:, [3]].values
                f1.to_csv(f, sep = " ", index = False)
            else:
                f1.to_csv(f, sep = " ", index = False)

预期结果:

a b c d e f
b1 2 9 4 5 6
c7 8 2 3 2 1
d6 2 7 5 9 9

我这么做是熊猫,但我没有得到我想要的结果是我得到的是这样的(我截断,因为实在是太长了)

0 1 2 3 4 5
a b c d e f
b1 2 3 4 5 6
c7 8 9 3 2 1
d6 2 3 5 9 9
0 1 2 3 4 5
a b c d e f
b1 2 3 4 5 6
c7 8 9 3 2 1
d6 2 3 5 9 9
0 1 2 3 4 5
a b c d e f
b1 2 3 4 5 6
python-3.x
1个回答
1
投票

我敢肯定,这确实你需要什么。一个更大的数据样本将帮助。此脚本假定两件事情:

首先,总是有相同数目的在各文件中的列的,并且这些文件总是用相同的字符分隔(空格,和标签相应地)

脚本装载来自文件中的一个的每一行,剥去换行符,分割空间的线,然后读取在时间整个第二文件中的行,在选项卡分割它和做数据检查/根据需要写入。在第二个文件的末尾时,指针被复位到第二文件的开头,然后将第一个文件中的下一行带来重复该过程。

FILE1.TXT

a b c d e f
b1 2 3 4 5 6
c7 8 9 3 2 1
d6 2 3 5 9 9

FILE2.TXT

f   G   h   s
d6  0.2 0.7 9
b1  3   8   2
c7  2   2   7

parse.朋友

#!/usr/bin/env python3

f1 = open("file1.txt", "r")
f2 = open("file2.txt", "r")
out_f = open("output.txt", "w+")

for l_f1 in f1:
    test_line_1 = l_f1.strip("\n").split(" ")
    for l_f2 in f2:
        test_line_2 = l_f2.strip("\n").split("\t")
        if test_line_2[0] == test_line_1[0]:
            test_line_1[2] = test_line_2[3]
            out_f.write("\t".join(test_line_1) + "\n")
    f2.seek(0,0)

f1.close()
f2.close()
out_f.close()

output.txt的

b1  2   2   4   5   6
c7  8   7   3   2   1
d6  2   9   5   9   9
© www.soinside.com 2019 - 2024. All rights reserved.