Python 将相同的行转换为列
我有以下csv文件,我想将其转换为输出,基本上它读取第一列值作为键,然后将下一个值附加到列中 input.csvPython 将相同的行转换为列,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,
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字典