2015-10-14 25 views
5

yeni bir sorusu olup olmadığını kontrol etme. Ben yinelenen bir veri çerçeve var ve ben bir sütun 2 satırda NaN veya olup olmadığını kontrol etmek istiyorum, NaN değilse, bu değer üzerinde bir eylem gerçekleştirmek için. Benim DataFrame şöyle görünür:Bir veri çerçevesinin satırları boyunca yineleme ve bir sütun satırındaki değerin NaN

df: 

    Column1 Column2 
0 a  hey 
1 b  NaN 
2 c  up 

Ya şimdi çalışıyorum geçerli:

for item, frame in df['Column2'].iteritems(): 
    if frame.notnull() == True: 
     print 'frame' 
arkasında düşünce ben olan her satır için sütunda 2 ve print çerçevedeki sıralar üzerinde yineleme olmasıdır

bir değer (bir dizedir). Ancak, ne olsun şudur: Ben sadece kodunun ilk satırı çalıştırdığınızda

AttributeError       Traceback (most recent call last) 
<ipython-input-80-8b871a452417> in <module>() 
     1 for item, frame in df['Column2'].iteritems(): 
----> 2  if frame.notnull() == True: 
     3   print 'frame' 

AttributeError: 'float' object has no attribute 'notnull' 

, ilk satırın çıktı yüzer nedeni olduğunu göstermektedir

0 
hey 
1 
nan 
2 
up 

olsun hata. Herkes istediğimi nasıl başarabileceğimi söyleyebilir mi?

df[df['Column2'].notnull()] 

Yukarıdaki kod size anlamak gibi Column2 değil null değer

cevap

4

sahip olduğu verileri, frame

for item, frame in df['Column2'].iteritems(): 

vereceğiniz her row geçerli:

+0

Sadece çerçevelerin (satırların) basıldığı, ancak 'nan' değerlerinin hala mevcut olduğu bir şekilde çalışır. Fakat çerçeve değerleri neden dizge olması gerektiğinde dalgalanır? –

+0

Pandalar, 'nl' kayan nokta sayısı olarak tüm eksik değerleri temsil eder –

+1

Değerin "NaN" olup olmadığını kontrol etmek için 'pd.notnull()' kullanabilirsiniz. Boş dizeleri/Hiçbiri değerlerini de filtrelemek isterseniz, - 'frame ve pd.notnull (frame):' ise. –

1

bu deneyin Sütun içinde, türü (muhtemelen büyük olasılıklaolmayacak) sütunundaki öğelerdir. 210 veya DataFrame). Bu nedenle, frame.notnull() bunun işe yaramaz.

yerine denemelisiniz -

for item, frame in df['Column2'].iteritems(): 
    if pd.notnull(frame): 
     print frame 
1

çiftleri (endeks, değer) üzerinden dolaşır (bir DataFrame bir sütun almak aldığınız budur) bir Serisi iteritems kullanma. item, 0, 1 ve 2 değerlerini döngünün üç yinelemesinde alacaktır ve frame, 'hey', NaN ve 'up' değerlerini alacaktır (bu nedenle "çerçeve" muhtemelen bunun için kötü bir addır). Hata,(kayan nokta sayısı olarak temsil edilen) yöntemi notnull yöntemini kullanmaya çalışmaktan gelir.

yerine işlevini pd.notnull kullanabilirsiniz:

In [3]: pd.notnull(np.nan) 
Out[3]: False 

In [4]: pd.notnull('hey') 
Out[4]: True 

başka yolu, (şimdi boolean olan) bu değerler üzerinde yineleme sonra tüm Serisi notnull kullanın ve olacaktır:

for _, value in df['Column2'].notnull().iteritems(): 
    if value: 
     print 'frame' 
+0

Hatanın açıklamasından dolayı, nan'in kayan nokta olarak sunulduğunu bilmiyordum! –