2015-12-15 13 views
8

NaN içeren satırları bırakmak için pandas.DataFrame.dropna yöntemini kullanıyorum. Bu işlev, belgelerde gösterildiği gibi, atılan satırları hariç tutan bir veri çerçevesi döndürür.Pandalar dropna - bırakılan satırları depola

Bırakılan satırların bir kopyasını ayrı bir veri çerçevesi olarak nasıl kaydedebilirim? Mi:

mydataframe[pd.isnull(['list', 'of', 'columns'])] 

hep subset=['list', 'of', 'columns'] ile denir dropna varsayarak damla dropna aynı satırları döndürmek için garantili?

cevap

10

Orijinal DataFrame'i NA serbest DataFrame'in tersini vermek için unary ~ (invert) operator'u kullanarak dizine ekleyerek bunu yapabilirsiniz.

na_free = df.dropna() 
only_na = df[~df.index.isin(na_free.index)] 

Diğer bir seçenek ufunc implementation of ~ kullanmak olacaktır.

only_na = df[np.invert(df.index.isin(na_free.index))] 
+0

Sorunun bu çözümünü gerçekten çok beğendim. Ancak, '-' 'nin lehine kabul edilmediğini unutmayın. – johnchase

2

Bir yorum yazacağım, ancak oldukça karmaşıklaşmaya başladıkça bir cevap yazacağımı düşündüm. Aşağıdaki veri çerçevesi ile başlayın : this post

gelen yanıtlara dayandığı:

import pandas as pd 
import numpy as np 
df = pd.DataFrame([['a', 'b', np.nan], [np.nan, 'c', 'c'], ['c', 'd', 'a']], 
       columns=['col1', 'col2', 'col3']) 
df 
    col1 col2 col3 
0 a b NaN 
1 NaN c c 
2 c d a 

Ve sütunlarında bunu col2 ve col3 Tek yön Nans ile satırları tutmak istediğini söylüyorsun şudur

df.loc[pd.isnull(df[['col2', 'col3']]).any(axis=1)] col1 col2 col3 0 a b NaN 

Böylece, bu, ilgilenilen sütunlarda Nans ile satırları düşürdüğümüzde, düşürülecek satırları bize verir. Aynı kod çalıştırabilir sütunları tutmak, ancak seçimi tersine bir ~ kullanmak için

df.loc[~pd.isnull(df[['col2', 'col3']]).any(axis=1)] 

    col1 col2 col3 
1 NaN c c 
2 c d a 

bu eşdeğerdir:

df.dropna(subset=['col2', 'col3']) 

Hangi biz testi:

df.dropna(subset=['col2', 'col3']).equals(df.loc[~pd.isnull(df[['col2', 'col3']]).any(axis=1)]) 

True 

Elbette bunu kendi büyük veri çerçevelerinizde test edebilir, ancak aynı cevabı almalısınız.

İlgili konular