Python: панды, импортирующие один столбец, как список - PullRequest
0 голосов
/ 04 ноября 2019

Я пытаюсь экспортировать данные из CSV-файла в список. Это список вин и их цвет. Но когда я проверяю, есть ли элемент в списке, я получаю ложный отрицательный результат. Когда я проверяю список, я думаю Я случайно создал вложенный список

Мой вопрос заключается в том, какие изменения я должен внести, чтобы получить список вин.

with open('colour_red.csv', 'r', encoding='utf-8-sig', errors='ignore') as f:
    red_reader = csv.reader(f)
    wine_list_red = list(red_reader)

Если я печатаю один элемент, я получаю:

[['Agni', 'R']]

Если я печатаю весь список, я получаю:

[['Prime_variety', 'Colour'],
 ['Abondant', 'W'],
 ['Afus Ali', 'W'],
 ['Agadai', 'W'],
 ['Airen', 'W'],
 ['Alarije', 'W'],...]

Второй вопрос: как получитсяесли я запускаю это, я получаю false.

if 'Abondant' in wine_list_red:
        print('True') 
    else:
        print('False') 

Ответы [ 2 ]

1 голос
/ 04 ноября 2019

Если у вас есть список типа:

original_list = [['Prime_variety', 'Colour'],
 ['Abondant', 'W'],
 ['Afus Ali', 'W'],
 ['Agadai', 'W'],
 ['Airen', 'W'],
 ['Alarije', 'W'],...]

и вы хотите получить только список вин, вы можете сделать:

wine_list = [x[0] for x in original_list if x[0] != "Prime_variety"]

>>> 'Abondant' in wine_list
True

Вы можете использовать pandas:

import pandas as pd

df = pd.read_csv("colour_red.csv")
print(df["Prime_variety"].tolist())
0 голосов
/ 04 ноября 2019

Когда вы читаете файл с помощью csv reader, он уже создает его в виде списка. Добавляя команду list (wine_list_red = list(red_reader)), вы создаете вложенный список.

Из документов

Каждая строка, считанная из файла csv, возвращается в виде списка строк. Автоматическое преобразование типов данных не выполняется, если не указана опция формата QUOTE_NONNUMERIC (в этом случае поля без кавычек преобразуются в числа с плавающей точкой).

Ваш второй вопрос относится к первому, in не распаковываетсявложенные слои списка. Это означает, что когда вы используете in, вы ищете строку "Wine Variety" по всем спискам, которые представлены как ["Wine Variety"], что приводит к сбою вашего оператора if.

Наконец, я заметил, что вы пометили свой вопрос как панды, но на самом деле вы не используете панд. Pandas - хороший подход, потому что он упрощает многие детали, стоящие за этим, и вы можете использовать pd.read_csv(filename), чтобы заботиться о большей части вашего кода

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...