Обработка и создание CSV файла
Есть определенный датасет (CSV файл) содержащий инфу о фильмах:
Title,Rating,Votes,Gross,Genre,Metascore,Certificate,Director,Year,Description,Runtime
Sen to Chihiro no kamikakushi,8.6,"747,148",$10.06M," Adventure, Family",96,U,Hayao Miyazaki,2001,"[""\nDuring her family's move to the suburbs, a sullen 10-year-old girl wanders into a world ruled by gods, witches, and spirits, and where humans are changed into beasts.""]",125 min
The Lion King,8.5,"1,041,158",$422.78M," Adventure, Drama",88,U,Roger Allers,1994,"['\nLion prince Simba and his father are targeted by his bitter uncle, who wants to ascend the throne himself.']",88 min
Нужно из первого CSV файла сделать новый, используя из датасета только столбцы Director Rating Votes
Соответственно вопрос: Как записать новую таблицу в файл используя только данные нужных мне столбцов. Дошел только до переписки всех данных в новый CSV (пытался сначала записать столбец директоров):
import csv
directors = list()
fieldnames = None
with open("TopAnimated.csv", mode = "r") as table:
t = csv.DictReader(table)
fieldnames = t.fieldnames
for row in t:
if row["Director"]:
directors.append(row)
with open("sorted_table.csv", mode = "w") as sorted_table:
st = csv.DictWriter(sorted_table, fieldnames)
st.writeheader()
st.writerows(directors)
Ответы (2 шт):
Возьмите Pandas и не мучайтесь:
import pandas as pd
df = pd.read_csv("TopAnimated.csv")
df = df[['Director', 'Rating', 'Votes']]
df.to_csv("sorted_table.csv")
Там могут быть какие-то тонкости настройки чтения и записи, но в целом должно быть вот так просто.
Для решения задачи достаточно стандартной библиотеки csv. Для чтения используем csv.DictReader, чтобы извлекать записи словарём, ключами которого будут значения полей в первой строке. Для записи используем csv.DictWriter, указав в параметре fieldnames нужные поля и указав extrasaction='ignore', чтобы исключить остальные:
import csv
with open("TopAnimated.csv", mode = "r") as f:
data = [*csv.DictReader(f)]
fieldnames = ['Director', 'Rating', 'Votes']
with open("sorted_table.csv", mode = "w") as f:
writer = csv.DictWriter(f, fieldnames, extrasaction='ignore')
writer.writeheader()
writer.writerows(data)