Как использовать Python метод set для столбца данных csv? - PullRequest
0 голосов
/ 31 марта 2020

Привет, я начал изучать python на этой неделе и пытался понять метод множеств в списках. Я прошел через сообщения, но все еще застрял. Я пытаюсь создать набор уникальных значений в столбце 5 файла CSV (ниже). Я пытаюсь использовать метод set для создания уникального списка, но продолжаю получать уникальные значения в строках файла данных вместо уникальных значений в столбце 5 (Name5) файла CSV. Я попробовал функцию добавления, но затем я получаю 7 строк данных с добавленной предыдущей строкой. Вывод, который мне нужен, это просто список уникальных значений в столбце 5. Любая помощь, пожалуйста,

Вывод, который я получаю: Красный Синий Синий Синий Красный Красный Зеленый

, когда я хочу

Красный Синий Зеленый

import csv

with open('Test_colours_in.csv', 'r') as csv_file:
    csv_reader = csv.DictReader(csv_file)
    # need to print unique values in column 5
    my_list = {}
    for line in csv_reader:
        my_list = line['Name5']
        print(set(my_list))

# csv file below
Name1,Name2,Name3,Name4,Name5,Name6,Name7,Name8
1,2,3,4,Red,6,7,8
1,2,3,4,Blue,6,7,8
1,2,3,4,Blue,6,7,8
1,2,3,4,Blue,6,7,8
1,2,3,4,Red,6,7,8
1,2,3,4,Red,6,7,8
1,2,3,4,Green,6,7,8

Ответы [ 2 ]

0 голосов
/ 31 марта 2020

Ваш код не работает, потому что вы постоянно перезаписываете переменную my_list. Вместо этого вы можете попробовать добавить с помощью .add.

Если вы хотите вывод "Red Blue Green", попробуйте это:

import csv

with open('Test_colours_in.csv', 'r') as csv_file:
    csv_reader = csv.DictReader(csv_file)
    # need to print unique values in column 5
    my_list = set()
    for line in csv_reader:
      my_list.add(line['Name5'])

    print(my_list)

Вывод:

{'Red', 'Blue', 'Green'}

Если Вы хотите уникальные строки, попробуйте это:

import csv

with open('Test_colours_in.csv', 'r') as csv_file:
    csv_reader = csv.DictReader(csv_file)
    # need to print unique values in column 5
    my_list = list()
    my_colors = set()
    for line in csv_reader:
      if line['Name5'] not in my_colors:
        my_list.append(line)
        my_colors.add(line['Name5'])
    for i in my_list:
      print(i)

Вывод:

OrderedDict([('Name1', '1'), ('Name2', '2'), ('Name3', '3'), ('Name4', '4'), ('Name5', 'Red'), ('Name6', '6'), ('Name7', '7'), ('Name8', '8')])
OrderedDict([('Name1', '1'), ('Name2', '2'), ('Name3', '3'), ('Name4', '4'), ('Name5', 'Blue'), ('Name6', '6'), ('Name7', '7'), ('Name8', '8')])
OrderedDict([('Name1', '1'), ('Name2', '2'), ('Name3', '3'), ('Name4', '4'), ('Name5', 'Green'), ('Name6', '6'), ('Name7', '7'), ('Name8', '8')])
0 голосов
/ 31 марта 2020

Вы можете попробовать следующее:

csv_reader = csv.DictReader(csv_file)
unique_vals = set([row['Name5'] for row in csv_reader])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...