Как убрать ненужные слова и оставить только цифры
Я новичок в программировании. Имеется csv файл, в нем 377185 строк. Все значения в столбце baths - str, подскажите как убрать из почти каждой строки данного столбца слово baths? В ручную 377тыс. обрабатывать нереально. Сначала хотел попробовать регулярные выражения, но для их использования нужно, чтобы цифры были в формате int либо float, для применения поиска, я правильно понимаю?
id baths
0 3.5
1 3 Baths
2 2 Baths
5 8
200 2
Ответы (2 шт):
можно так:
with open("d:\\data.csv") as file:
lines = file.readlines()
lines = [line.lower().replace("baths", "") for line in lines]
with open("d:\\data.csv", 'w') as file:
file.write(''.join(lines))
тут сначала перевожу строку в нижний регистр, чтобы удалить все baths в независимости от регистра
недостаток - всё будет переведено в нижний регистр, если этого не надо, то алгоритм можно усложнить:
with open("d:\\data.csv") as file:
lines = file.readlines()
lines = [(' '.join(word for word in line[:-1].split() + '\n') if word.lower() != 'baths') for line in lines]
with open("d:\\data.csv", 'w') as file:
file.write(''.join(lines))
тут что бы все работало корректно приходится отрезать у строки последний символ (который является переводом на новую строку), а затем добавлять его заново при сборке строки из слов с исключенным baths
Воспользуйтесь модулем Pandas - он идеально подходит для обработки, анализа и визуализации табличных данных:
import pandas as pd # https://pandas.pydata.org/docs/getting_started/install.html
# парсим CSV файл в Pandas DataFrame
df = pd.read_csv("file.csv", sep=",")
# в столбце `baths` удаляем все символы, кроме цифр и точки
df["baths"] = df["baths"].str.replace(r"[^\d\.]", "", regex=True)
# записываем DataFrame обратно в CSV файл
df.to_csv("result.csv", index=False)
Регулярное выражение r"[^\d\.]" - обозначает:
- все что в в квадратных скобках - любой символ из набора
- если первым символом внутри квадратных скобок является
^- значит применить отрицание к набору символов. Т.е. по смыслу - любые символы, кроме указанных в квадратных скобках, после^. \d- обозначает любую цифру от0до9.\.- обозначает символ точки, т.к..без экранирования обозначает на языке RegEx - любой одиночный символ.
Все вместе это обозначает - найти все символы кроме цифр и символа точки и заменить их на пустую строку, т.е. удалить.
PS существуют сервисы, которые позволяют протестировать RegEx и объяснить (на английском) как он работает. Например - regex101.com