2017-07-27 5 views
6

dataframe dfमैं डेटा फ्रेम को एक स्ट्रिंग से तुलना नहीं कर सकता! लेकिन मैं अपने पक्षांतरित तुलना कर सकते हैं

df = pd.DataFrame({ 
    1: [1, 2], 
    2: ['a', 3], 
    3: [None, 7] 
}) 

df 

    1 2 3 
0 1 a NaN 
1 2 3 7.0 

जब मैं एक तार के साथ तुलना

df == 'a' 
TypeError: Could not compare ['a'] with block values 

हालांकि, पक्षांतरित लेने से समस्या का समाधान करने पर विचार ?!

(df.T == 'a').T 

     1  2  3 
0 False True False 
1 False False False 

इस त्रुटि क्या है? क्या मैं ऐसा कुछ कर सकता हूं जिसके साथ मैं अपना डेटा फ्रेम बना रहा हूं? ट्रांसपोज़ की तुलना करने के बारे में क्या अलग है?

+4

इसका मूल रूप से मतलब है कि आपके पास मिश्रित डाइटप्स हैं (इसलिए यह एक ही numpy सरणी में सभी मानों को नहीं रख सकता है - इसे ब्लॉक का उपयोग करने की आवश्यकता है)। जब आप ट्रांसफर लेते हैं तो दोनों कॉलम ऑब्जेक्ट बन जाते हैं ताकि यह तुलना कर सके। – ayhan

+1

हाँ, मैं एक ही निष्कर्ष पर आया ... क्या आप 'df.astype (str) .eq ('a')' या 'df.select_dtypes (['object']) का उपयोग नहीं कर सकते हैं। Eq ('a') '? – MaxU

+0

मैं अभी भी उलझन में क्यों हूं, मुझे समझ में नहीं आता कि ये जवाब क्यों नहीं हैं। (-: – piRSquared

उत्तर

4

जब आपके डेटा फ्रेम बनाने, घोषित dtype=object:

In [1013]: df = pd.DataFrame({ 
     ...:  1: [1, 2], 
     ...:  2: ['a', 3], 
     ...:  3: [None, 7] 
     ...: }, dtype=object) 

In [1014]: df 
Out[1014]: 
    1 2  3 
0 1 a None 
1 2 3  7 

अब, आप स्थानांतरण के बिना तुलना कर सकते हैं:

In [1015]: df == 'a' 
Out[1015]: 
     1  2  3 
0 False True False 
1 False False False 

मेरे विश्वास है कि के साथ, आपके कॉलम ऑब्जेक्ट नहीं है शुरू करने के लिए (है जहां भी संभव हो वे coerced हैं) लेकिन मिश्रित मूल्यों के कारण परिवर्तन परिवर्तन परिवर्तन।


स्रोत कोड pandas/internals.py में यह मिल गया:

if not isinstance(result, np.ndarray): 
    # differentiate between an invalid ndarray-ndarray comparison 
    # and an invalid type comparison 
    ... 
    raise TypeError('Could not compare [%s] with block values' % 
        repr(other)) 

आइटम तुलना की जा रही हैं सरणी के dtype से मेल नहीं खाता, यह त्रुटि फेंक दिया है।

+0

यह प्रश्न मुझे कोडिनिजा के सवालों में से एक का जवाब देने की कोशिश कर रहा था और मैं 'df ==' सागर 'की कोशिश कर रहा था और अपने परीक्षण डेटाफ्रेम के साथ मुद्दों में भाग रहा था :-) – piRSquared

+0

@piR वास्तव में पूछे गए! मुझे पता था कि एक टिप्पणी में आपका सुझाव इस सवाल से प्रेरित था लेकिन मुझे नहीं पता था कि इस सवाल को प्रेरित किया गया था! –

+1

एक बड़ा सर्कल! – piRSquared

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

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