मेरे पास एक बड़ी फ़ाइल (2 जीबी) स्पष्ट डेटा है (ज्यादातर "नैन" - लेकिन वास्तविक मूल्यों के साथ यहां और वहां आबादी है) जो एक डेटा फ्रेम में पढ़ने के लिए बहुत बड़ा है । मुझे प्रत्येक कॉलम के लिए सभी अद्वितीय मूल्यों को स्टोर करने के लिए एक ऑब्जेक्ट के साथ आने का एक कठिन समय था (जो मेरा लक्ष्य है - अंत में मुझे इसे मॉडलिंग के लिए कारक बनाने की आवश्यकता है)सूचियों की सूची विकसित करने के लिए पाइथोनिक तरीका
मैंने इसे समाप्त करने के बाद फ़ाइल को पढ़ रहा था डेटाफ्रेम में भाग में और फिर प्रत्येक कॉलम के अद्वितीय मान प्राप्त करें और उन्हें सूचियों की सूची में स्टोर करें। मेरा समाधान काम करता है, लेकिन अधिकांश अन-पायथनिक लग रहा था - क्या यह पाइथन (ver 3.5) में इसे पूरा करने का एक क्लीनर तरीका है। मुझे कॉलम की संख्या पता है (~ 2100)।
import pandas as pd
#large file of csv separated text data
data=pd.read_csv("./myratherlargefile.csv",chunksize=100000, dtype=str)
collist=[]
master=[]
i=0
initialize=0
for chunk in data:
#so the first time through I have to make the "master" list
if initialize==0:
for col in chunk:
#thinking about this, i should have just dropped this col
if col=='Id':
continue
else:
#use pd.unique as a build in solution to get unique values
collist=chunk[col][chunk[col].notnull()].unique().tolist()
master.append(collist)
i=i+1
#but after first loop just append to the master-list at
#each master-list element
if initialize==1:
for col in chunk:
if col=='Id':
continue
else:
collist=chunk[col][chunk[col].notnull()].unique().tolist()
for item in collist:
master[i]=master[i]+collist
i=i+1
initialize=1
i=0
उसके बाद, सभी अनन्य मानों के लिए अपने अंतिम कार्य इस प्रकार है:
i=0
names=chunk.columns.tolist()
for item in master:
master[i]=list(set(item))
master[i]=master[i].append(names[i+1])
i=i+1
इस प्रकार गुरु [i] मुझे स्तंभ नाम और उसके बाद अद्वितीय मानों की सूची देता है - कच्चे तेल की लेकिन यह काम करता है - मेरी मुख्य चिंता सूची को "बेहतर" तरीके से बना रही है यदि संभव हो तो।
आप पर विचार किया है उपयोग करने के लिए एक जनरेटर का उपयोग lazily फ़ाइल को पढ़ने के लिए बेहतर है? (उपज कीवर्ड देखें) – salparadise
यह चाल चल सकता है। मैं अभी भी इटरेटर्स और जेनरेटर के साथ अच्छा नहीं हूं - लेकिन सुझाए गए उपज कीवर्ड पर एक सरसरी नज़र सही दिशा में प्रतीत होता है। – RDS
यह वास्तव में हुड के नीचे जनरेटर का उपयोग कर रहा है। चुनौती ठीक वही कर रही है। जिज्ञासा से आप 32 या 64 बिट मशीन/पायथन पर चल रहे हैं? 'आयात sys; प्रिंट (sys.maxsize) 'को तब तक काम करना चाहिए जब आप पाइथन 2.6 –