2014-06-26 35 views
6

Ben aşağıdaki gibi görünüyor CSV dosyası var,Python'da CSV dosyasının benzersiz değerleriyle bir liste nasıl oluşturulur?

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 

İki listeleri oluşturmak istiyoruz

Category = [Category1, Category2, Category3] 

ve

Year = [1994, 1995, 1996, 1998] 

ben sütunda yinelenen ihmal istiyorum . Ben

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

ve döngüye alınması,

for Column in DataCaptured: 
+1

"Kategori" ile "Yıl" arasında herhangi bir ilişki var mı? – dawg

+0

@dawg Hayır. İlişkili değiller. Onlar sadece o yıl içinde rastgele olaylar oldu. Sipariş önemli değilse –

cevap

7

Sen yapabilirsin, aşağıdaki dosyayı okuyorum: Sipariş yapmazsa, yorum belirtildiği üzere

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'] 

Sorun, bir kümeyi kullanarak daha kolay ve hızlı olabilir:

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

, Kategori, Yıl = set(), set() 'yapmak ve DataCaptured satırında' 'yi kullanmak için daha kolay: Year.add (satır [0]); Category.add (satır [1]) ' –

+2

Anlaşmalı. Siparişin önemli olduğunu düşündüm, bu yüzden bir liste kullandım ... – dawg

+0

@AdamSmith çok iyi çalıştı. –

4

Bunu yapmak için çok özlü bir yol, pandas kullanmaktır, faydaları şunlardır: daha hızlı bir CSV pharresine sahiptir; (Sadece oraya gitmek için bir df.apply(set) gerektirir kadar) ve o sütunlarda çalışır:

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 

olumsuz bir pandas.Series döndürdüğünü ve her liste erişim elde etmek, sen list(df.apply(set)[0]) gibi bir şey yapmak gerekir.

Düzenleme

düzen korunacak zorundaysa

, o da örneğin çok kolay yapılabilir:

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

item.unique()list s yerine, numpy.array s dönecektir.

İlgili konular