как "отсортировать CSV-файл" Python - PullRequest
1 голос
/ 29 мая 2019

Я пытаюсь создать новый файл, который содержит только данные для фильмов с рангом выше 9.

Анализируемый набор данных содержит рейтинг для многих фильмов, полученных из IMDB.Поля данных:

  • Votes: количество людей, оценивающих фильм
  • Rank: средний рейтинг фильма
  • Title: название фильма
  • Year: год выпуска фильма

Код, который я пробовал:

import csv

filename = "IMDB.txt"
with open(filename, 'rt', encoding='utf-8-sig') as imdb_file:
    imdb_reader = csv.DictReader(imdb_file, delimiter = '\t')
    with open('new file.csv', 'w', newline='') as high_rank:
        fieldnames = ['Votes', 'Rank', 'Title', 'Year']
        writer = csv.DictWriter(high_rank, fieldnames=fieldnames)
        writer.writeheader()
        for line_number, current_row in enumerate (imdb_reader):
            if(float(current_row['Rank']) > 9.0):
                csv_writer.writerow(dict(current_row))

, но, к сожалению, егоне работает, что мне делать?

Ответы [ 2 ]

0 голосов
/ 29 мая 2019

Исходя из вашего комментария , кодировка по умолчанию для вашей локали, по-видимому, не поддерживает весь диапазон Unicode. Для выходного файла необходимо указать кодировку, которая будет обрабатывать произвольные символы Юникода. Обычно в системах, отличных от Windows, вы используете 'utf-8'; в Windows вы можете использовать 'utf-16' или 'utf-8-sig' (программы Windows часто предполагают, что UTF-8 без явной подписи находится в кодировке локали, и неправильно ее интерпретируют). Исправить так же просто, как изменить:

with open('new file.csv', 'w', newline='') as high_rank:

до:

with open('new file.csv', 'w', encoding='utf-8', newline='') as high_rank:

изменение указанного encoding на то, что имеет смысл для вашей ОС и варианта использования.

0 голосов
/ 29 мая 2019

Предположим, у вас есть следующее имя листа Excel temp.csv, и вы хотите отфильтровать пленки с рангом выше 9 (в комплекте):

Один простой способ сделать это - использовать модули pandas. Это дает вам возможность:

  • чтение .csv файлов с pd.read_csv методом (doc)
  • фильтр данные, как вы хотите
  • экспорт данных в новый файл: для вывода .csv, df.to_csv выполнение задания (doc)

Предположим, у вас есть следующий фрейм данных:

enter image description here

Код, приведенный ниже, выполняет работу:

# import modules
import pandas as pd

# Path - name of your file
filename = "temp.csv"

# Read the csv file
df = pd.read_csv(filename, sep=";")
print(df)
#    Votes  Rank                               Film  Year
# 0     15    16          The Shawshank Redemption   1994
# 1   2004     5                     The Godfather   1972
# 2    486    13            The Godfather: Part II   1974
# 3    529     9  Il buono, il brutto, il cattivo.   1966
# 4    289    12                      Pulp Fiction   1994
# 5     98    11                         Inception   2010
# 6     69    18                  Schindler's List   1993
# 7      3     7                         Angry Men   1957
# 8    584    14   One Flew Over the Cuckoo's Nest   1975

# Filter the csv file
df_filtered = df[df["Rank"] >= 9]
print(df_filtered)
#    Votes  Rank                               Film  Year
# 0     15    16          The Shawshank Redemption   1994
# 2    486    13            The Godfather: Part II   1974
# 3    529     9  Il buono, il brutto, il cattivo.   1966
# 4    289    12                      Pulp Fiction   1994
# 5     98    11                         Inception   2010
# 6     69    18                  Schindler's List   1993
# 8    584    14   One Flew Over the Cuckoo's Nest   1975

# name new csv file
new_filename = filename[:-3] + "_new" + filename[-3:]

# Export dataframe to csv file
df_filtered.to_csv(new_filename)

Новый .csv выглядит так:

enter image description here

...