Как создать список в Python с уникальными значениями CSV-файла?

у меня есть CSV-файл, который выглядит следующим образом,

1994, Category1, Something Happened 1
1994, Category2, Something Happened 2
1995, Category1, Something Happened 3
1996, Category3, Something Happened 4
1998, Category2, Something Happened 5

Я хочу создать два списка,

Category = [Category1, Category2, Category3]

и

Year = [1994, 1995, 1996, 1998]

Я хочу опустить дубликаты в столбце. Я читаю файл следующим образом,

DataCaptured = csv.reader(DataFile, delimiter=',')  
DataCaptured.next()

и перебирая,

   for Column in DataCaptured:

2 ответов


Вы можете сделать:

DataCaptured = csv.reader(DataFile, delimiter=',', skipinitialspace=True) 

Category, Year = [], []
for row in DataCaptured:
    if row[0] not in Year:
        Year.append(row[0])
    if row[1] not in Category:
        Category.append(row[1])    

print Category, Year        
# ['Category1', 'Category2', 'Category3'] ['1994', '1995', '1996', '1998']

как указано в комментариях, если порядок не имеет значения, использование набора будет проще и быстрее:

Category, Year = set(), set()
for row in DataCaptured:
    Year.add(row[0])
    Category.add(row[1])

очень краткий способ сделать это-использовать pandas преимущества: она быстрее КШМ pharser; и работает в столбцы (поэтому он требует только одного df.apply(set) чтобы вы там):

In [244]:
#Suppose the CSV is named temp.csv
df=pd.read_csv('temp.csv',header=None)
df.apply(set)
Out[244]:
0                        set([1994, 1995, 1996, 1998])
1            set([ Category2,  Category3,  Category1])
2    set([ Something Happened 4,  Something Happene...
dtype: object

недостатком является то, что он возвращает pandas.Series, и чтобы получить доступ к Каждый список, вам нужно сделать что-то вроде list(df.apply(set)[0]).

редактировать

если заказ должен быть сохранен, это также можно сделать очень легко, например:

for i, item in df.iteritems():
    print item.unique()

item.unique() вернутся numpy.arrays, вместо lists.