当5列值4相同而一列值为di时,如何从csv文件中删除重复值

2024-04-30 06:50:59 发布

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

我有一个以blow格式显示的csv文件&;我想使用python脚本进行下表中提到的更改,所以您可以建议我使用相应的方法进行更改

表1:(输入文件)

Columns:   1     2     3     4    5
row1   :   abc   fff   v1    hhh  jjj
row2   :   abc   fff   v2    hhh  jjj
row3   :   efg   ooo   h1    ppp  www
row3   :   efg   ooo   h2    ppp  www

表2:(输出文件)

Columns:    1     2      3      4    5
row1   :   abc   fff   v1|v2   hhh  jjj
row2   :   efg   ooo   h1|h2   ppp  www

你能请任何人帮我做吗


Tags: columns文件fffwwwv2v1row1row2
1条回答
网友
1楼 · 发布于 2024-04-30 06:50:59

要阅读csv并在需要的地方获取它,可以使用pandas

import pandas as pd

df = pd.read_csv('input_file_name.csv', header=None, sep='\s+')
#sep is the delimiter so change it if it is ',' for instance
#header is set to None as you seem not to have column names

df = df.groupby(['1', '2', '4', '5'])['3'].agg(lambda x: '|'.join(x)).reset_index()
df
#1     2     4    5   3
#abc   fff   hhh  jj  jv1|v2   
#efg   ooo   ppp  www h1|h2   

同样,您可以使用csv模块,但是您会看到pandas使其更容易:

import csv

with open('myfile.csv') as infile, open('output.csv', 'wb') as outfile:
    value_place = 2
    result = {}
    for line in infile:
        line = line.strip().split(',')
        value = line[value_place]
        key = tuple(x for i, x in enumerate(line) if i != value_place)
        if key in result:
            result[key].append(value)
        else:
            result[key] = [value]
    desired = {k: '|'.join(v) for k, v in result.items()}
    writer = csv.writer(outfile)
    for k, v in desired.items():
        writer.writerow(list(k)+[v])

相关问题 更多 >