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.