Удаление строк датафрейма со строковыми данными
Изучаю нейронки, возникла проблема с датасетом. Вот первые 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)]