[英]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.