2017-07-27 32 views
6

dfVeri çerçevesini bir dizeyle karşılaştırtamıyorum! Ama onun devrik karşılaştırabilirsiniz

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 

Ben

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

Ancak bir dize ile karşılaştırmak, devrik alarak sorunu giderir dataframe düşünün ?!

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

     1  2  3 
0 False True False 
1 False False False 

bu hatası nedir? Veri ağımı nasıl yapılandıracağımla ilgili bir şey mi? Transpoze ile kıyaslama konusunda farklı olan nedir? Veri çerçevesi oluştururken

+4

Temelde, karışık bir çeşitliliğe sahip olduğunuz anlamına gelir (böylece tüm değerleri tek bir numpy dizisinde tutamaz - blokları kullanması gerekir). Transpoze ettiğinizde, her iki sütun da nesneye dönüşür ve böylece karşılaştırma yapabilir. – ayhan

+1

Evet, aynı sonuca vardım ... 'df.astype (str) .eq ('a')' veya 'df.select_dtypes (['object']) kullanamazsınız. Eq ('a') '? – MaxU

+0

neden hala kafam karıştı, neden cevap olmadığını anlamıyorum. (-: – piRSquared

cevap

4

, dtype=object beyan:

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 

Şimdi, aktarılması olmadan karşılaştırabilirsiniz:

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

Inancım ki (senin sütunlar nesneler değildir ile başlayacak Mümkün olan her yerde zorlanırlar, ancak aktarım, karışık değerler nedeniyle değişimi zorlar.


kaynak kodu pandas/internals.py bu Bulunan:
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)) 

madde dizinin d_type eşleşmiyor Karşılaştırılan Eğer

, bu hata atılır.

+0

Bu soru benim codeninja'nın sorularını cevaplamaya çalışıyorum ve 'df ==' Sea 'denemeye çalışıyorum ve test dataframe :-) ile ilgili sorunlara koşturmaya çalışıyorum :) – piRSquared

+0

@piRSquared Really! Bir yorumdaki önerinizin bu sorudan ilham aldığını biliyordum, ancak bu sorunun bundan dolayı ilham aldığını hiç bilmiyordum! –

+1

Bir büyük daire! – piRSquared

İlgili konular