Удаление строк датафрейма со строковыми данными

Изучаю нейронки, возникла проблема с датасетом. Вот первые 5 строк датасета.

data = [['daewoo', 'nexia 1 поколение [2-й рестайлинг]', '140200', '2012', '60500', 'седан', 'механика', 'бензин', '1.5', '80.0'], 
    ['kia', 'cerato', '996000', '2018', '28000', 'седан', 'автомат', 'бензин', '2.0', '150.0'],
    ['suzuki', 'jimny 3 поколение [рестайлинг]', '970000', '2014', '49500', 'внедорожник', 'автомат', 'бензин', '1.3', '85.0'],
    ['bmw', 'x1 18 e84 [рестайлинг]', '140200', '2012', '60500', 'кроссовер', 'автомат', 'бензин', '2.0', '150.0'],
    ['4', '5', '6', '7', '6', '5', '3', '0', '2.0', '150.0']]

columns = ['mark', 'model', 'price', 'year', 'mileage', 'body', 'kpp', 'fuel', 'volume', 'power']

index = [0, 1, 2, 3, 4]

d = pd.DataFrame(data, columns=columns, index=index)

Некоторые столбцы, в которых должна быть текстовая информация содержат цифры. body, kpp, fuel, mark, model содержат числа. Как программно можно удалить такие строки целиком?


Ответы (1 шт):

Автор решения: MaxU

Если нужно удалить те строки где все указанные столбцы состоят только из цифр:

cols = ["body", "kpp", "fuel", "mark", "model"]
res = d.loc[~d[cols].apply(lambda c: c.str.contains(r"^\d+$")).all(axis=1)]

результат:

In [56]: res
Out[56]:
     mark                               model   price  year mileage         body       kpp    fuel volume  power
0  daewoo  nexia 1 поколение [2-й рестайлинг]  140200  2012   60500        седан  механика  бензин    1.5   80.0
1     kia                              cerato  996000  2018   28000        седан   автомат  бензин    2.0  150.0
2  suzuki      jimny 3 поколение [рестайлинг]  970000  2014   49500  внедорожник   автомат  бензин    1.3   85.0
3     bmw              x1 18 e84 [рестайлинг]  140200  2012   60500    кроссовер   автомат  бензин    2.0  150.0

если нужно удалить те строки где хотя бы один из указанных столбцов состоит только из цифр:

res = d.loc[~d[cols].apply(lambda c: c.str.contains(r"^\d+$")).any(axis=1)]
→ Ссылка