2016-05-01 8 views
6

मैंscipy sparse csr से pandas में परिवर्तन?

sklearn.preprocessing.OneHotEncoder 

कुछ डेटा उत्पादन scipy.sparse.csr.csr_matrix कैसे मैं इसे वापस मर्ज कर सकते हैं अन्य स्तंभों के साथ अपने मूल dataframe में है को बदलने के लिए इस्तेमाल किया है?

मैं pd.concat का उपयोग करने की कोशिश की, लेकिन मैं

TypeError: cannot concatenate a non-NDFrame object 

धन्यवाद

मिल

उत्तर

8

तो एक csr_matrix है, तो आप .toarray() (वहाँ भी है .todense() कि एक numpymatrix है, जो भी है DataFrame लिए काम करता है पैदा करता है का उपयोग कर सकते निर्माता):

df = pd.DataFrame(A.toarray()) 

आप सी उसके बाद pd.concat() के साथ इसका उपयोग करें।

A = csr_matrix([[1, 0, 2], [0, 3, 0]]) 

    (0, 0) 1 
    (0, 2) 2 
    (1, 1) 3 

<class 'scipy.sparse.csr.csr_matrix'> 

pd.DataFrame(A.todense()) 

    0 1 2 
0 1 0 2 
1 0 3 0 

<class 'pandas.core.frame.DataFrame'> 
RangeIndex: 2 entries, 0 to 1 
Data columns (total 3 columns): 
0 2 non-null int64 
1 2 non-null int64 
2 2 non-null int64 

संस्करण 0.20 में, pandas शुरू की sparse data structures, SparseDataFrame भी शामिल है।

वैकल्पिक रूप से, pandas पर कनवर्ट करते समय स्मृति से बाहर निकलने से बचने के लिए आप sklearn पर स्पैस मैट्रिस पास कर सकते हैं। arrayscipy.sparse.csr_matrix कन्स्ट्रक्टर को पास करके scipy.sparse.hstack को जोड़ने के लिए अपने अन्य डेटा को स्पैर प्रारूप में रूपांतरित करें (docs देखें)।

+0

यदि मेरा एटोरे() मेमोरी एरर की ओर जाता है तो मैं क्या कर सकता हूं? क्या डेटाफ्रेम को इसे एक अंडारे में परिवर्तित किए बिना बनाने का कोई तरीका है? – user77005

+0

आप पांडा [स्पैस डेटा स्ट्रक्चर] पर एक नज़र डालना चाहते हैं (https://pandas.pydata.org/pandas-docs/stable/sparse.html) – Stefan

1

एनकोडर बनाते समय पैरामीटर sparse से False पर सेट करके आप पहले स्थान पर एक स्पैर मैट्रिक्स वापस लेने से बच सकते हैं।

OneHotEncoder राज्यों के प्रलेखन:

विरल: बुलियन, डिफ़ॉल्ट = सच

विरल मैट्रिक्स यदि किसी और यह सच है सेट एक सरणी वापस आ जाएगी वापस आ जाएगी।

फिर आप डेटाफ्रेम कन्स्ट्रक्टर को डेटाफ्रेम में numpy सरणी को बदलने के लिए फिर से कॉल कर सकते हैं।

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