如何将 Pandas (Python) 数据帧中的特定值写入文件中的特定位置(即标识符之后)?

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

我有一个由以下条目组成的文件:

A       first = 4 | 1_3_5_4        Name1                                  
labelToSkip
i = 1000000 j = -3 k = -15
end

B       first = 4 | 9_2_2_4        Name2                                  
labelToSkip
i = 150000 j = -3 k = -20
end
...

我已经成功构建了一个 Pandas 数据框(df),其中包含我从另一个文件读取和修改的数据。数据框如下所示:

    i      j      k     
0   unit1  unit2  unit3
1   1000   100    84      
2  -3000   200    60       
3  -2000   90     195      
4   900    40     209 

现在我想从数据框中选择一行(如第 3 行)并将 i、j、k 值放入第一个文件中。

例如,我想输入数据帧第 3 行中的 i、j、k 值:

3  -2000   90     195 

代替我选择的条目(如“B”)中的 i、j、k 值,得到:

B       first = 4 | 9_2_2_4        Name2                                  
labelToSkip
i = -2000 j = 90 k = 195
end

实际上,条目相当复杂,我需要替换的值并不总是在条目的第三行。我需要帮助的主要事情是如何在文件中找到(1)“B”或“Name2”,然后替换“B”或“Name2”下特定标识符后面的值。

对于没有提供尝试,我深表歉意。我知道如何将数据帧写入 .txt 文件(例如,来自这篇文章:将 Pandas 数据帧写入 .txt 文件)。我还发现了如何替换数据框中的特定值。但是,我找不到任何有关如何将数据帧中的特定值放在外部文件中的标识符之后的信息。如果有人可以提供提示,我将非常感激。

python python-3.x pandas dataframe file-io
1个回答
0
投票

可能的解决方案之一是使用

re
模块:

import re

idx = 3
to_replace = "B"

with open("input_file.txt", "r") as f_in:
    file_string = f_in.read()

    i, j, k = df.loc[idx, ["i", "j", "k"]]

    file_string = re.sub(
        rf"^({to_replace}\s.*?)i = \S+ j = \S+ k = \S+",
        f"\g<1>i = {i} j = {j} k = {k}",
        file_string,
        flags=re.M | re.S,
    )

with open("output_file.txt", "w") as f_out:
    f_out.write(file_string)

output_file.txt
将包含:

A       first = 4 | 1_3_5_4        Name1
labelToSkip
i = 1000000 j = -3 k = -15
end

B       first = 4 | 9_2_2_4        Name2
labelToSkip
i = -2000 j = 90 k = 195
end

input_file.txt
包含:

A       first = 4 | 1_3_5_4        Name1
labelToSkip
i = 1000000 j = -3 k = -15
end

B       first = 4 | 9_2_2_4        Name2
labelToSkip
i = 150000 j = -3 k = -20
end
© www.soinside.com 2019 - 2024. All rights reserved.