簡體   English   中英

使用python根據csv中的列進行分組

[英]Group according to a column in csv using python

我有一個包含三列的 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 是一個相當重的庫,可以用於此目的。 但是,如果您正在尋找臨時問題的快速解決方案,我個人認為值得花些時間。

您的數據格式有些不規則,一行或多行有 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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM