Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将相同的行转换为列_Python_Csv - Fatal编程技术网

Python 将相同的行转换为列

Python 将相同的行转换为列,python,csv,Python,Csv,我有以下csv文件,我想将其转换为输出,基本上它读取第一列值作为键,然后将下一个值附加到列中 input.csv a.jpg,a,b a.jpg,c,d b.jpg,e,f b.jpg,g,h c.jpg,i,j c.jpg,k,l c.jpg,m,n c.jpg,o,p c.jpg,q,r d.jpg,s,t d.jpg,u,v e.jpg,w,x e.jpg,y,z a.jpg a,b c,d b.jpg e,f g,h c.jpg i,j k,l m,n o,p q,r d.jpg s,

我有以下csv文件,我想将其转换为输出,基本上它读取第一列值作为键,然后将下一个值附加到列中

input.csv

a.jpg,a,b
a.jpg,c,d
b.jpg,e,f
b.jpg,g,h
c.jpg,i,j
c.jpg,k,l
c.jpg,m,n
c.jpg,o,p
c.jpg,q,r
d.jpg,s,t
d.jpg,u,v
e.jpg,w,x
e.jpg,y,z
a.jpg a,b c,d
b.jpg e,f g,h
c.jpg i,j k,l m,n o,p q,r
d.jpg s,t u,v
e.jpg w,x y,z
output.csv

a.jpg,a,b
a.jpg,c,d
b.jpg,e,f
b.jpg,g,h
c.jpg,i,j
c.jpg,k,l
c.jpg,m,n
c.jpg,o,p
c.jpg,q,r
d.jpg,s,t
d.jpg,u,v
e.jpg,w,x
e.jpg,y,z
a.jpg a,b c,d
b.jpg e,f g,h
c.jpg i,j k,l m,n o,p q,r
d.jpg s,t u,v
e.jpg w,x y,z
我尝试了以下方法,但仍然不知道如何根据上面所需的格式将值解包以输出csv

import csv

with open('input.csv', 'r', newline='') as input_csv, open('output.csv', 'w', newline='') as output_csv:

filename = {}

for row in csv.reader(input_csv):
    if row[0] not in filename:
        filename[row[0]]=[[row[1],row[2]]]
    else:
        filename[row[0]].append([row[1],row[2]])

for item in filename.items():
    print(item)
输出

('a.jpg', [['a', 'b'], ['c', 'd']])
('b.jpg', [['e', 'f'], ['g', 'h']])
('c.jpg', [['i', 'j'], ['k', 'l'], ['m', 'n'], ['o', 'p'], ['q', 'r']])
('d.jpg', [['s', 't'], ['u', 'v']])
('e.jpg', [['w', 'x'], ['y', 'z']])
你可以用这个

将熊猫作为pd导入
将输入CSV文件读取为:

df=pd.read\u csv('input.csv',header=None)
按第一列对数据进行分组:

dff=df.groupby(0).apply(lambda x:list(x[1])+list(x[2]))
将每个组的值写入输出CSV文件

dff.iteritems()中的i的

打开('output.csv','a')作为输出:
out.write(','.join([i[0]]+i[1])+'\n')

以下是不带熊猫的代码:

import csv

with open('input.csv', 'r', newline='') as input_csv, open('output.csv', 'w', newline='') as output_csv:

    filename = {}

    for row in csv.reader(input_csv):
        if row[0] in filename:
            my_list = [row[1],row[2]]
            filename[row[0]].append(my_list)
        elif row[0] not in filename:
            filename[row[0]]=[[row[1],row[2]]]

    for item in filename:
        output_csv.write('{} {}\n'.format(item,
            ' '.join([','.join(l) for l in filename[item]])))
基本上我只修改了最后两行


首先,我们需要遍历字典,然后为每个条目写行。最后一行将键与值连接起来。该值本身是一个连接的列表项,分两步执行。

检查这是否适用于您

dic = {}

for row in csv.reader(input_csv):
    key, *values = row.split(",")
    if key not in dic:
        dic[key] = []
    for value in values:
        dic[key].append(value)

for key, value in dic.items():
    value = ", ".join(value)
    print(f"{key} {value}")
输出:

a.jpg a, b, c, d
b.jpg e, f, g, h
c.jpg i, j, k, l, m, n, o, p, q, r
d.jpg s, t, u, v
e.jpg w, x, y, z

你反对使用pandas来修改.csv文件吗?@KaranShishoo不反对,我还在尝试使用python字典