使用python根据csv中的列进行分组

使用python根据csv中的列进行分组,python,csv,Python,Csv,我有一个csv文件包含三列,主语,谓语,宾语 我想根据主题列值对数据进行分组,并将rest数据作为列表添加到python中的主题词典中 per_subject = defaultdict(list) with open("C:\\Rasha\\Nema\CODES\\DataSets\\geocoordinates-fixed.csv", mode='r') as inputfile: reader = csv.reader(inputfile) next(reader, No

我有一个csv文件包含三列,主语,谓语,宾语 我想根据主题列值对数据进行分组,并将rest数据作为列表添加到python中的主题词典中

per_subject = defaultdict(list)
with open("C:\\Rasha\\Nema\CODES\\DataSets\\geocoordinates-fixed.csv",  mode='r') as inputfile:
    reader = csv.reader(inputfile)
    next(reader, None)  # skip the header row
    for subject, predicate, object in reader:
        per_subject[subject.strip()].append([predicate.strip()])
python编译器出现以下错误:

文件C:/Users/HP_Ra/PycharmProjects/ReadCSV/ReadCSV.py,第10行,在 对于读卡器中的主语、谓语、宾语:ValueError:值太多,无法解压缩,应为3

非常适合此任务,因为它可以为您读取csv,并具有以下功能:

import pandas as pd
from pathlib import Path

input_file = Path("C:/Rasha/Nema/CODES/DataSets/geocoordinates-fixed.csv")
df = pd.read_csv(input_file)
# if the headers aren't right then:
# df.columns = ['subject', 'predicate', 'object']
df_per_subject = df.groupby('subject')['predicate'].agg(lambda x: list(x))
# And if you want a dict out
df_per_subject.to_dict()

请注意,如果这是生产代码,那么pandas是一个相当繁重的库。然而,如果您正在寻找一个临时问题的快速解决方案,我个人认为这是值得的

数据格式有一些不规则,一行或多行有3个以上的值。最简单的下一步是不将值读入3元组,而是读入列表,然后如果列表大小合适,则将其解压缩,否则将其打印出来以进行后续故障排除:

for row_num, row_list in enumerate(reader, start=1):
    if len(row_list) == 3:
        subject, predicate, obj = row_list
        per_subject[subject.strip()].append(predicate.strip())
    else:
        print("unexpected row size at row", row_num, ":", row_list)

?请发布csv文件的一个片段。您的错误告诉您csv文件中有三列以上的内容。顺便说一句,评论不用于扩展讨论;这段对话已经结束。