首页 > 解决方案 > 使用python根据csv中的列分组

问题描述

我有一个 csv 文件包含三列,主题,谓词,对象我想根据主题列值对数据进行分组,并将其余数据作为附加到 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)

标签: pythoncsv

解决方案


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

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 是一个相当繁重的库,可用于此。但是,如果您正在寻找临时问题的快速解决方案,我个人认为这是值得的。


推荐阅读