Ausgabe
Ich habe einen Datenrahmen, der aus einigen Manipulationen von 2 anderen dfs resultiert
Hinweis: PKEY_ID ist der benutzerdefinierte Index
Jetzt möchte ich einen anderen resultierenden Datenrahmen, der nur die Spalten mit Nicht-Null-Werten enthalten würde. Unten ist mein Code
diff_col_lst =
.isna().all()]
err_df = df[diff_col_lst]
Ausgabe
Jetzt ist der Datenrahmen tatsächlich leer, da es überhaupt keine Spalten gibt, aber beim Überprüfen der df.shape
err_df.shape
Q-1: Obwohl der Datenrahmen leer ist, sagt er, dass es 10 Zeilen gibt. So erhalten Sie die Form als (0,0), wenn df leer ist, ohne explizit df.empty zu überprüfen und Formen zu manipulieren.
F -2: Können wir den folgenden Code noch abstrakter machen?
diff_col_lst =
.isna().all()]
err_df = df[diff_col_lst]
Lösung
Zuerst für Q2:
Du könntest benutzen
err_df = df.loc[:, df.any()]
If you look at documentation of any
, it says Return whether any element is True, potentially over an axis. The default axis is 0 or index. So it looks at each column from top to bottom along the index and see if there is any non-null value and if found, it returns True along that axis. We don’t need to supply axis=0, because its the default value. It will return all such columns which have at least one non-null value.
Now you use .loc
to access the columns returned by df.any()
and the :
part says that I need all indices.
Q1. IIUC, you are filtering by columns which have a non-null value. Then if you need to check if any columns are there are not and you want to check only using shape then you can shape on columns like
err_df.columns.shape
which should give (0,)
in this case.
Oder Sie könnten verwenden, size
was die Anzahl der Elemente angibt. In diesem Fall wird 0 für zurückgegeben
err_df.size
Beantwortet von – SomeDude
Antwort geprüft von – David Marino (FixError Volunteer)