Pandalar veri çerçevesinde hangi sütunların herhangi bir NaN değeri içerdiğini bulma


144

Burada dağılmış olası NaN değerlerini içeren bir panda veri çerçevesi göz önüne alındığında:

Soru: Hangi sütunların NaN değerleri içerdiğini nasıl belirlerim? Özellikle, NaN içeren sütun adlarının bir listesini alabilir miyim?


5
df.isna().any()[lambda x: x]benim için çalışıyor
matanster

Yanıtlar:


249

GÜNCELLEME: Pandalar 0.22.0 kullanarak

Daha yeni Panda sürümleri yeni yöntemler kullanır 'DataFrame.isna ()' ve 'DataFrame.notna ()'

In [71]: df
Out[71]:
     a    b  c
0  NaN  7.0  0
1  0.0  NaN  4
2  2.0  NaN  4
3  1.0  7.0  0
4  1.0  3.0  9
5  7.0  4.0  9
6  2.0  6.0  9
7  9.0  6.0  4
8  3.0  0.0  9
9  9.0  0.0  1

In [72]: df.isna().any()
Out[72]:
a     True
b     True
c    False
dtype: bool

sütun listesi olarak:

In [74]: df.columns[df.isna().any()].tolist()
Out[74]: ['a', 'b']

bu sütunları seçmek için (en az bir NaNdeğer içeren ):

In [73]: df.loc[:, df.isna().any()]
Out[73]:
     a    b
0  NaN  7.0
1  0.0  NaN
2  2.0  NaN
3  1.0  7.0
4  1.0  3.0
5  7.0  4.0
6  2.0  6.0
7  9.0  6.0
8  3.0  0.0
9  9.0  0.0

ESKİ cevap:

İsnull () kullanmaya çalışın :

In [97]: df
Out[97]:
     a    b  c
0  NaN  7.0  0
1  0.0  NaN  4
2  2.0  NaN  4
3  1.0  7.0  0
4  1.0  3.0  9
5  7.0  4.0  9
6  2.0  6.0  9
7  9.0  6.0  4
8  3.0  0.0  9
9  9.0  0.0  1

In [98]: pd.isnull(df).sum() > 0
Out[98]:
a     True
b     True
c    False
dtype: bool

veya @ root önerilen daha net sürüm olarak:

In [5]: df.isnull().any()
Out[5]:
a     True
b     True
c    False
dtype: bool

In [7]: df.columns[df.isnull().any()].tolist()
Out[7]: ['a', 'b']

bir alt küme seçmek için - en az bir NaNdeğer içeren tüm sütunlar :

In [31]: df.loc[:, df.isnull().any()]
Out[31]:
     a    b
0  NaN  7.0
1  0.0  NaN
2  2.0  NaN
3  1.0  7.0
4  1.0  3.0
5  7.0  4.0
6  2.0  6.0
7  9.0  6.0
8  3.0  0.0
9  9.0  0.0

Yanıtınız için teşekkürler! Sütun adlarının bir listesini almak istiyorum (buna göre sorumu güncelledim), nasıl olduğunu biliyor musun?
denvar

Boş değerler yerine belirli bir değere sahip tüm sütunları seçmenin iyi bir yolunu biliyor musunuz?
gregorio099

1
Boşver! Boş değerler yerine değerleri aramak için .isnull () öğesini .isin (['xxx']) ile değiştirin:df.columns[df.isin['xxx'].any()].tolist()
gregorio099

@ gregorio099, bunu şu şekilde yaparım:df.columns[df.eq(search_for_value).any()].tolist()
MaxU

1
Güzel cevap, zaten iptal edildi. Fikir - Yeni fonksiyonlar ekleyebilir isna, notna ?
jezrael

26

Kullanabilirsiniz df.isnull().sum(). Tüm sütunları ve her özelliğin toplam NaN'lerini gösterir.


9

Ekranda görsel olarak incelemek için birçok sütuna sahip olduğum bir sorun yaşadım, böylece rahatsız edici sütunları filtreleyen ve döndüren kısa bir liste

nan_cols = [i for i in df.columns if df[i].isnull().any()]

eğer bu herkes için yararlıysa


4

Çok sayıda sütuna sahip veri kümelerinde, kaç sütun boş değer içerdiğini ve kaç sütunun bulunmadığını görmek daha da iyidir.

print("No. of columns containing null values")
print(len(df.columns[df.isna().any()]))

print("No. of columns not containing null values")
print(len(df.columns[df.notna().all()]))

print("Total no. of columns in the dataframe")
print(len(df.columns))

Örneğin, veri çerçevemde, 19'u en az bir boş değer içeren 82 sütun içeriyordu.

Ayrıca , daha fazla boş değere sahip olanlara bağlı olarak sütunları ve satırları otomatik olarak kaldırabilirsiniz.
Bunu akıllıca yapan kod şöyledir:

df = df.drop(df.columns[df.isna().sum()>len(df.columns)],axis = 1)
df = df.dropna(axis = 0).reset_index(drop=True)

Not: Yukarıdaki kod, tüm null değerlerinizi kaldırır. Boş değerler istiyorsanız, bunları daha önce işleyin.


2

en az bir boş değer içeren sütun adlarını yazdırmak için bu üç kod satırını kullanın:

for column in dataframe:
    if dataframe[column].isnull().any():
       print('{0} has {1} null values'.format(column, dataframe[column].isnull().sum()))

2

Bunların her ikisi de çalışmalıdır:

df.isnull().sum()
df.isna().sum()

DataFrame yöntemleri isna()veya isnull()tamamen aynıdır.

Not : Boş dizeler ''Yanlış (NA) olarak kabul edilmez


1

Bu benim için çalıştı,

1. En az 1 boş değerli Sütun elde etmek için. (sütun adları)

data.columns[data.isnull().any()]

2. En az 1 null değere sahip, sütunları saymak için.

data[data.columns[data.isnull().any()]].isnull().sum()

[İsteğe bağlı] 3. Boş sayının yüzdesini almak için.

data[data.columns[data.isnull().any()]].isnull().sum() * 100 / data.shape[0]

Çoklu yaklaşımlar için teşekkürler!
Mike Rapadas
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.