Python:将每行一个值的CSV转换为每行的多个值,第一个值作为键

2024-09-28 22:29:08 发布

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

我在互联网上到处寻找这个问题的答案。 我已经找到了非常相似的答案,接近这一个,但没有相似到足以让我完成工作。在

我一直在尝试将每行只有一个值的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

我需要这样的输出:

^{pr2}$

我知道这可能是一个无效的CSV格式,但这不是我的CSV的最终形式,这只是中间的一步。在这之后会有更多的魔力;-)。在

我想要一种使用Python的方法来实现这一点,因为这将是我正在编写的脚本的一部分,这个脚本已经用Python编写了。在

我已经研究了一段时间了,所以如果这里有人愿意帮忙的话,那就太棒了!在


Tags: 文件csv答案image脚本id互联网jpg
2条回答

给你

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

此代码将执行您想要的操作:

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可能更适合您的问题。在

相关问题 更多 >