Мне нравится отфильтровывать данные, длина строки которых не равна 10.
Если я пытаюсь отфильтровать строку, длина строки столбца A или B которой не равна 10, я попытался это сделать.
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')
Это работает медленно, но работает.
Однако иногда это приводит к ошибке, когда данные в представляют собой не строку, а число (интерпретируется как число, когда read_csv читает входной файл).
File "<stdin>", line 1, in <lambda>
TypeError: object of type 'float' has no len()
Я считаю, что вместо этого должен быть более эффективный и элегантный код.
Основываясь на ответах и комментариях ниже, самое простое решение, которое я нашел:
df=df[df.A.apply(lambda x: len(str(x))==10]
df=df[df.B.apply(lambda x: len(str(x))==10]
или же
df=df[(df.A.apply(lambda x: len(str(x))==10) & (df.B.apply(lambda x: len(str(x))==10)]
или же
df=df[(df.A.astype(str).str.len()==10) & (df.B.astype(str).str.len()==10)]