我一直在寻找这个互联网上的答案。 我发现答案非常相似,并且接近这个答案,但对我来说还不够相似。
我一直在尝试将每行具有单个值的CSV文件转换和/或重新排序为具有多行值(以逗号分隔)的CSV格式。
输入CSV如下所示:
id,image
001,han.jpg
001,leia.jpg
001,chewie.jpg
002,stewie.jpg
002,meg.jpg
003,marty.jpg
003,doc_brown.jpg
003,biff.jpg
我需要输出如下:
id,image
001,han.jpg,leia.jpg,chewie.jpg
002,stewie.jpg,meg.jpg
003,marty.jpg,doc-brown.jpg,biff.jpg
我知道这可能最终会成为无效的CSV格式,但这不是我的CSV的最终形式,这只是介于两者之间的一步。在此之后会有更多的魔力; - )。
我希望使用Python来实现这一目标,因为这将成为我已经用Python编写的脚本的一部分。
我已经研究了很长一段时间了,所以如果有人愿意提供帮助,那就太棒了!
答案 0 :(得分:1)
你走了,
import csv
lines =[]
with open(inputFile,'rb') as f:
for line in csv.reader(f):
lines.append(line)
def groupUp (lines):
finalList = []
for row in lines:
for i,otherRow in enumerate(finalList):
if row[0]==otherRow[0]:
finalList[i] += row[1:]
break
else:
finalList.append(row)
return finalList
with open(newFile,'wb') as f:
a = csv.writer(f)
a.writerows(groupUp(lines))
答案 1 :(得分:0)
此代码可以执行您想要的操作:
import pandas as pd
import io
input = """id,image
001,han.jpg
001,leia.jpg
001,chewie.jpg
002,stewie.jpg
002,meg.jpg
003,marty.jpg
003,doc_brown.jpg
003,biff.jpg"""
# read the csv with pandas
df = pd.read_csv(io.BytesIO(input))
output = "id,image\n"
# group the dataset by id
for id_, data in df.groupby("id"):
# that's a bit ugly, but it generates a line in the format you want
output += "%d,%s\n" % (id_, ",".join(data["image"].values))
print output[:-1] # removes the last '\n'
正如您所说,输出不再是CSV文件。也许另一种格式更合适。例如,JSON可能更适合您的问题。