Wenn Werte sind leere Strings erstellen Teilmenge und für alle True
s pro Zeile hinzufügen all
oder any
:
df = df[(df[['Column1', 'Column2', 'Column1']] != '').all(axis=1)]
df = df[~(df[['Column1', 'Column2', 'Column1']] == '').any(axis=1)]
Und wenn Werte sind NaN
s, None
s Verwenden Sie dropna
mit Parameter subset
:
df = df.dropna(subset=['Column1', 'Column2', 'Column1'])
Probe:
df = pd.DataFrame({'A':[np.nan,'','p','hh','f'],
'B':['',np.nan,'','','o'],
'C':['a','s','d','f','g'],
'D':['f','g','h','j','k'],
'E':['l','i',np.nan,'u','o'],
'F':['','','o','i',np.nan]})
print (df)
A B C D E F
0 NaN a f l
1 NaN s g i
2 p d h NaN o
3 hh f j u i
4 f o g k o NaN
df1 = df.dropna(subset=['A', 'B', 'F'])
print (df1)
A B C D E F
2 p d h NaN o
3 hh f j u i
df2 = df[(df[['A', 'B', 'F']] != '').all(axis=1)]
print (df2)
A B C D E F
4 f o g k o NaN
df2 = df[~(df[['A', 'B', 'F']] == '').any(axis=1)]
print (df2)
A B C D E F
4 f o g k o NaN
EDIT:
Für den Vergleich Strings und einige Spalte ist numerisch erhalten:
TypeError: Could not compare [''] with block values
Es gibt 2 Lösungen für sie - vergleichen numpy Array erstellt von values
oder Werte konvertieren zu string
s von astype
:
df = pd.DataFrame({'A':[np.nan,7,8,8,8],
'B':['',np.nan,'','','o'],
'C':['a','s','d','f','g'],
'D':['f','g','h','j','k'],
'E':['l','i',np.nan,'u','o'],
'F':['','','o','i',np.nan]})
print (df)
A B C D E F
0 NaN a f l
1 7.0 NaN s g i
2 8.0 d h NaN o
3 8.0 f j u i
4 8.0 o g k o NaN
df2 = df[(df[['A', 'B', 'F']].values != '').all(axis=1)]
print (df2)
A B C D E F
4 8.0 o g k o NaN
df2 = df[(df[['A', 'B', 'F']].astype(str) != '').all(axis=1)]
print (df2)
A B C D E F
4 8.0 o g k o NaN
Ich habe Ihre erste Zeile versucht, 'df = df [(df [['Spalte1', 'Spalte2', 'Spalte1']]! = '') .alle (Achse = 1)]', Ich bekomme 'TypeError: Konnte Vergleiche [''] mit Blockwerten nicht. – Bluefire
Es gibt ein Problem mit gemischten Werten, z numerisch mit Zeichenfolgen. Eine einfachere Lösung ist das Konvertieren von Daten in ein numpy Array und dann das Vergleichen von 'df = df [(df [[' Column1 ',' Column2 ',' Column1 ']]] Werte! =' ') .all (axis = 1)] ' – jezrael
Ich bearbeite Antwort, bitte überprüfen Sie es. – jezrael