Ich filtere gerne Daten heraus, deren Stringlänge ungleich 10 ist.
Wenn ich versuche, eine Zeile herauszufiltern, deren Zeichenfolgenlänge in Spalte A oder B nicht gleich 10 ist, habe ich dies versucht.
df=pd.read_csv('filex.csv')
df.A=df.A.apply(lambda x: x if len(x)== 10 else np.nan)
df.B=df.B.apply(lambda x: x if len(x)== 10 else np.nan)
df=df.dropna(subset=['A','B'], how='any')
Dies funktioniert langsam, funktioniert aber.
Es kann jedoch manchmal zu Fehlern kommen, wenn die Daten in A keine Zeichenfolge, sondern eine Zahl sind (interpretiert als Zahl, wenn read_csv die Eingabedatei liest).
File "<stdin>", line 1, in <lambda>
TypeError: object of type 'float' has no len()
Ich glaube, stattdessen sollte es effizienteren und eleganteren Code geben.
Basierend auf den Antworten und Kommentaren unten sind die einfachsten Lösungen, die ich gefunden habe:
df=df[df.A.apply(lambda x: len(str(x))==10]
df=df[df.B.apply(lambda x: len(str(x))==10]
oder
df=df[(df.A.apply(lambda x: len(str(x))==10) & (df.B.apply(lambda x: len(str(x))==10)]
oder
df=df[(df.A.astype(str).str.len()==10) & (df.B.astype(str).str.len()==10)]