Zeigen Sie Zeilen mit einem oder mehreren NaN-Werten im Pandas-Datenrahmen an

74

Ich habe einen Datenrahmen, in dem einige Zeilen fehlende Werte enthalten.

In [31]: df.head()
Out[31]: 
                             alpha1  alpha2    gamma1    gamma2       chi2min  
filename                                                                        
M66_MI_NSRh35d32kpoints.dat  0.8016  0.9283  1.000000  0.074804  3.985599e+01   
F71_sMI_DMRI51d.dat          0.0000  0.0000       NaN  0.000000  1.000000e+25   
F62_sMI_St22d7.dat           1.7210  3.8330  0.237480  0.150000  1.091832e+01   
F41_Car_HOC498d.dat          1.1670  2.8090  0.364190  0.300000  7.966335e+00   
F78_MI_547d.dat              1.8970  5.4590  0.095319  0.100000  2.593468e+01 

Ich möchte diese Zeilen auf dem Bildschirm anzeigen. Wenn ich es versuche df.isnull(), gibt es einen langen Datenrahmen mit Trueund False. Gibt es eine Möglichkeit, diese Zeilen auszuwählen und auf dem Bildschirm auszudrucken?

Friedlich
quelle

Antworten:

145

Sie können den DataFrame.anyParameter with verwenden, axis=1um mindestens einen Truein Reihe zu überprüfen, indem Sie DataFrame.isnaFolgendes verwenden boolean indexing:

df1 = df[df.isna().any(axis=1)]

d = {'filename': ['M66_MI_NSRh35d32kpoints.dat', 'F71_sMI_DMRI51d.dat', 'F62_sMI_St22d7.dat', 'F41_Car_HOC498d.dat', 'F78_MI_547d.dat'], 'alpha1': [0.8016, 0.0, 1.721, 1.167, 1.897], 'alpha2': [0.9283, 0.0, 3.833, 2.809, 5.459], 'gamma1': [1.0, np.nan, 0.23748000000000002, 0.36419, 0.095319], 'gamma2': [0.074804, 0.0, 0.15, 0.3, np.nan], 'chi2min': [39.855990000000006, 1e+25, 10.91832, 7.966335000000001, 25.93468]}
df = pd.DataFrame(d).set_index('filename')

print (df)
                             alpha1  alpha2    gamma1    gamma2       chi2min
filename                                                                     
M66_MI_NSRh35d32kpoints.dat  0.8016  0.9283  1.000000  0.074804  3.985599e+01
F71_sMI_DMRI51d.dat          0.0000  0.0000       NaN  0.000000  1.000000e+25
F62_sMI_St22d7.dat           1.7210  3.8330  0.237480  0.150000  1.091832e+01
F41_Car_HOC498d.dat          1.1670  2.8090  0.364190  0.300000  7.966335e+00
F78_MI_547d.dat              1.8970  5.4590  0.095319       NaN  2.593468e+01

Erklärung :

print (df.isna())
                            alpha1 alpha2 gamma1 gamma2 chi2min
filename                                                       
M66_MI_NSRh35d32kpoints.dat  False  False  False  False   False
F71_sMI_DMRI51d.dat          False  False   True  False   False
F62_sMI_St22d7.dat           False  False  False  False   False
F41_Car_HOC498d.dat          False  False  False  False   False
F78_MI_547d.dat              False  False  False   True   False

print (df.isna().any(axis=1))
filename
M66_MI_NSRh35d32kpoints.dat    False
F71_sMI_DMRI51d.dat             True
F62_sMI_St22d7.dat             False
F41_Car_HOC498d.dat            False
F78_MI_547d.dat                 True
dtype: bool

df1 = df[df.isna().any(axis=1)]
print (df1)
                     alpha1  alpha2    gamma1  gamma2       chi2min
filename                                                           
F71_sMI_DMRI51d.dat   0.000   0.000       NaN     0.0  1.000000e+25
F78_MI_547d.dat       1.897   5.459  0.095319     NaN  2.593468e+01
jezrael
quelle
2
Achse: {0 oder 'Index', 1 oder 'Spalten'} oder Tupel / Liste davon
Übergeben Sie
4
Angenommen, Sie möchten sich nur isnull()auf einige Spalten anwenden ?
Gathide
2
df [df ['gamma1', 'gamma2']. isna (). any (Achse = 1)] oder für eine Spalte ist es df [df ['gamma1']. isna ()]. Die Idee ist dieselbe, unabhängig davon, ob wir im gesamten Datenrahmen oder in wenigen Spalten nach Nullwerten suchen. Nach dem Anwenden von isna (), das für die boolesche Indizierung verwendet wird, erhalten wir boolesche Reihen.
Jchenna
8

Verwenden Sie df[df.isnull().any(axis=1)]für Python 3.6 oder höher.

Prateek Nagaria
quelle
0

Angenommen, gamma1 und gamma2 sind zwei solche Spalten, für die df.isnull (). Any () den Wert True angibt. Der folgende Code kann zum Drucken der Zeilen verwendet werden.

bool1 = pd.isnull(df['gamma1'])
bool2 = pd.isnull(df['gamma2'])
df[bool1]
df[bool2]
user9194161
quelle
0

Kann auch versuchen, fast ähnliche frühere Antworten.

    d = {'filename': ['M66_MI_NSRh35d32kpoints.dat', 'F71_sMI_DMRI51d.dat', 'F62_sMI_St22d7.dat', 'F41_Car_HOC498d.dat', 'F78_MI_547d.dat'], 'alpha1': [0.8016, 0.0, 1.721, 1.167, 1.897], 'alpha2': [0.9283, 0.0, 3.833, 2.809, 5.459], 'gamma1': [1.0, np.nan, 0.23748000000000002, 0.36419, 0.095319], 'gamma2': [0.074804, 0.0, 0.15, 0.3, np.nan], 'chi2min': [39.855990000000006, 1e+25, 10.91832, 7.966335000000001, 25.93468]}
    df = pd.DataFrame(d).set_index('filename')

Geben Sie hier die Bildbeschreibung ein

Anzahl der Nullwerte in jeder Spalte.

df.isnull().sum()

Geben Sie hier die Bildbeschreibung ein

df.isnull().any(axis=1)

Geben Sie hier die Bildbeschreibung ein

abdul
quelle