2014-06-26 8 views
6

मैं 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: 
+1

क्या 'श्रेणी' और' वर्ष' के बीच कोई संबंध है? – dawg

+0

@dawg संख्या वे संबंधित नहीं हैं। वे उस साल यादृच्छिक घटनाएं हुईं। –

उत्तर

7

आप कर सकते हैं:

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]) 
+0

यदि ऑर्डर कोई फर्क नहीं पड़ता है, तो संभवतः 'श्रेणी, वर्ष = सेट(), सेट() 'करना आसान है और डेटा कैप्चर में पंक्ति के लिए' Year.add (row [0]) का उपयोग करें; Category.add (पंक्ति [1]) ' –

+2

सहमत हैं। मैंने माना कि आदेश महत्वपूर्ण था इसलिए मैंने एक सूची का उपयोग किया ... – dawg

+0

@AdamSmith वास्तव में अच्छी तरह से काम किया। –

4

ऐसा करने का एक संक्षिप्त तरीका pandas का उपयोग करना है, लाभ हैं: इसमें एक तेज़ सीएसवी फार्सर है; और यह कॉलम में काम करता है (इसलिए यह केवल एक 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.array रों वापस आ जाएगी list रों के बजाय,।

संबंधित मुद्दे