如何按另一个fi的值更改csv列中的值

2024-05-16 08:16:16 发布

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

我有一个后处理CSV文件。我的文件示例:

serial_number1, name_number_ID1, price1, state1
serial_number2, name_number_ID1, price2, state2
serial_number3, name_number_ID2, price1, state3
serial_number4, name_number_ID3, price1, state4
...

所以我有一个重复的名字列。在另一个文件中,sample name有一个别名,该文件如下所示:

NAME_NUMBER_ID; Alias; Data; NrOfOfert
name_number_ID1; Name1; XX; YY
name_number_ID2; Name2; XX; YY
name_number_ID3; Name3; XX; YY

现在我需要从第二个文件更改Alias上第一个文件中的NameID。你知道吗

结果文件将是:

    serial_number1, Name1, price1, state1
    serial_number2, Name1, price2, state2
    serial_number3, Name2, price1, state3
    serial_number4, Name3, price1, state4
    ...

读取第一个文件(数百条记录)并将nameID替换为正确的别名的最佳方法是什么?我应该编一本字典吗?有时我的别名太多,无法手动完成。你知道吗

有人能给我找到最理想的解决方案吗?你知道吗

编辑:我刚从第二个文件创建了一个字典,并使用它:

def.replace({def.iloc[:,1]:dictionary})

谢谢你的回答,我学到了很多。你知道吗


Tags: 文件namenumberserialxxname1id1yy
2条回答

我建议使用pandas和导入read\u csv。只导入所需的列,然后合并数据帧。你知道吗

import pandas as pd
# For selecting cols you can use keys or col names
df1 = pd.read_csv(infile1, usecols=[0,3])
df2 = pd.read_csv(infile2, usecols=[1,2])

# Merge data set 1 and 2
new_df = pd.concat([df1, df2], axis=1, sort=False)

如果您还没有准备好使用pandas来实现这一点,您可以让python逐行替换。熊猫就是为这个而生的,所以它是更好的选择。你知道吗

这个例子应该可以启动更改,但是需要一些更改才能实际工作。你知道吗

#open all necessary files
with open('infile.csv', 'r') as infile, open('namefile.csv', 'r') as namefile,
    open('outfile.csv', 'w') as outfile:

    #iterate over both input files
    for in_line, name_line in zip(infile, namefile):
        #collect the row's information
        out_ls = in_line.split(', ')
        #collect the name
        name = name_line.split('; ')[1]
        #replace the id with the name
        out_ls[1] = name
        #print out the line
        outfile.write(', '.join(out_ls))           

如果您使用这段代码,请注意行号是否匹配(这样头就不会碍事,并且一个文件中的行不会比另一个文件多,从而迫使程序提前结束)。这种实现通过逐行写入更正的部分来避免程序存储整个列或文件。祝你好运!你知道吗

相关问题 更多 >