-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
44 lines (34 loc) · 2.97 KB
/
Copy pathmain.py
File metadata and controls
44 lines (34 loc) · 2.97 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import pandas as pd
import re
# Загрузка данных (замените 'your_file.csv' на ваш путь)
df = pd.read_csv('output.csv', sep=',')
# 1. Округляем зарплату до тысяч (до ближайшего)
df['Зарплата'] = df['Зарплата'].apply(lambda x: round(x, -3))
# 2. Заполняем пропущенные уровни позиции (наиболее частым уровнем или предыдущим)
df['Уровень позиции'].fillna(df.groupby('Название должности')['Уровень позиции'].transform(lambda x: x.mode()[0] if not x.mode().empty else None), inplace=True)
df['Уровень позиции'].fillna(method='ffill', inplace=True)
# Список «нормальных» названий должностей (можно расширять по необходимости)
KEYWORDS = [
'программист', 'разработчик', 'руководитель', 'аналитик', 'бизнес-аналитик',
'инженер', 'тестировщик', 'архитектор', 'контент-менеджер', 'консультант',
'методолог', 'специалист', 'администратор', 'менеджер', 'тимлид',
'инженер-программист', 'эксперт', 'стажер', 'консультант-разработчик',
'программист-консультант', 'консультант-менеджер', 'эксперт-программист',
'методолог-аналитик', 'qa-инженер', 'эксперт-архитектор', 'архитектор-разработчик'
]
def clean_job_title(title):
# Убираем спецсимволы (оставляем только буквы и пробелы)
cleaned = re.sub(r'[^a-zA-Zа-яА-ЯёЁ\s]', '', title)
words = cleaned.split()
if len(words) > 1: # Если строка состоит из нескольких слов
for kw in KEYWORDS:
if kw.lower() in cleaned.lower(): # Если ключевое слово найдено в строке
return kw # Возвращаем найденное ключевое слово
return None # Если ключевое слово не найдено, удаляем всю строку
return None # Если строка состоит из одного слова, удаляем её
# 3. Чистим названия должностей
df['Название должности'] = df['Название должности'].apply(lambda x: clean_job_title(x) if isinstance(x, str) else x)
# Удаляем строки, где после очистки название должности пропало
df = df.dropna(subset=['Название должности'])
# Сохраняем обработанный файл
df.to_csv('cleaned_file_6.csv', index=False, sep=',')