python - 使用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)
解决方案
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 是一个相当繁重的库,可用于此。但是,如果您正在寻找临时问题的快速解决方案,我个人认为这是值得的。
推荐阅读
- java - 在 Spring 的循环中监控作业状态
- r - memory.limit() 坏了吗?
- python - 是否有一个函数可以帮助我将 (x) 拆分为一个字符串,每个拆分都包含第 (x+1) 个值?
- java - 如何在异步任务的 for 循环中更新列表视图
- android - windowBackground 上的居中图像与膨胀布局上的图像不同
- python - 无法从 __init__ 导入属性
- python - 施加约束时问题不遵循 DCP 规则
- mysql - 为什么 Google Cloud SQL 中的 COUNT 有时会这么慢?
- google-app-maker - 如何使用计算模型将数据保存到 REST API
- playframework - 一个灵活的扩展方法的多对多版本