【问题标题】:identical rows into columns csv python相同的行成列csv python
【发布时间】:2020-03-06 04:21:07
【问题描述】:

我有以下 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

输出.csv

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']])

【问题讨论】:

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

标签: python csv


【解决方案1】:

您可以为此使用pandas

import pandas as pd

将输入的 CSV 文件读取为:

df = pd.read_csv('input.csv',header=None)

按第一列对数据进行分组:

dff =df.groupby(0).apply(lambda x: list(x[1])+list(x[2]))

将每个组的值写入输出 CSV 文件

for i in dff.iteritems():
    with open('output.csv','a') as out:
        out.write(','.join([i[0]]+i[1])+'\n')

【讨论】:

    【解决方案2】:

    这里是没有pandas的代码:

    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]])))
    

    基本上我只更改了最后两行。

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

    【讨论】:

      【解决方案3】:

      检查这是否适合您。

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-02-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-01
        • 1970-01-01
        • 2017-06-14
        相关资源
        最近更新 更多