簡體   English   中英

僅通過 python 使用 csv 模塊從 csv 文件中過濾掉特定數據

[英]filter out specific data from csv file only using csv module via python

Person       occupation     partner        favorite_color
Anthony      student        Alissa         pink
Alissa       professor      Anthony        yellow
Jordan       professor      Khan           green
Khan         student        Jordan         orange
Benny        professor      Anastasia      blue
Anastasia    student        Benny          red
McCurdy      professor      Anastasia      purple
Alicia       student        Benny          black
Janet        student        Benny          white

您好,我想知道是否可以過濾和更改我的整個 csv 文件,以便每個教授的人都將他的學生列在另一列中,例如:

V_I_P          color     sidekick    sidekick_color       
**Alissa**     yellow
                         Anthony     pink
**Benny**      blue      Anastasia   red
                         Alicia      black
                         Janet       white

等等...

因此,如果此人是教授,則他在 vip 列中,然后如果學生被分配給教授,他們將進入 sidekick 列。 是創建一個新的 csv 輸出文件還是修改整個 csv 文件更好? csv 模塊是否足夠? 在互聯網上,我一直在尋找使用 pandas 模塊的方法

這在沒有 Pandas 的情況下使用 Python 的標准庫是可能的。 一個csv.DictWriter可以在這里提供幫助。 還可以使用defaultdict來幫助創建基於occupation列的列表:

from collections import defaultdict
import csv

# Read the rows into lists based on the occupation
data = defaultdict(list)

with open('input.csv') as f_input:
    csv_input = csv.DictReader(f_input)
    
    for row in csv_input:
        data[row['occupation']].append(row)
        

with open('output.csv', 'w', newline='') as f_output:
    csv_output = csv.DictWriter(f_output, fieldnames=['V_I_P', 'color', 'sidekick', 'sidekick_color'])
    csv_output.writeheader()
    
    for professor in data['professor']:
        person = professor['Person']
        csv_output.writerow({'V_I_P' : f"**{person}**", 'color' : professor['favorite_color']})

        for student in data['student']:
            if student['partner'] == person:
                csv_output.writerow({'sidekick' : student['Person'], 'sidekick_color' : student['favorite_color']})

為您提供輸出 CSV,其中包含:

V_I_P,color,sidekick,sidekick_color
**Alissa**,yellow,,
,,Anthony,pink
**Jordan**,green,,
,,Khan,orange
**Benny**,blue,,
,,Anastasia,red
,,Alicia,black
,,Janet,white
**McCurdy**,purple,,

我建議您print(data)了解存儲的內容。

暫無
暫無

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

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