#python #pandas #database #numpy #stata
Вопрос:
У меня есть набор данных, содержащий такие значения, как хинди, хинди, хенди, английский, английский, английский, inglsh…so дальше. Я хочу, чтобы этот набор данных разделился на разные наборы данных, которые будут иметь одинаковые значения. например, в этом случае два набора данных; первый имеет значения хинди, хинди, хенди, а другой состоит из английского, английского, инглийского, инглийского.
Комментарии:
1. Можете ли вы придумать простые правила эвристики, по которым вы хотите их отсортировать?
2. Как выглядит набор данных? Этот вопрос слишком расплывчат
3. существуют ли только эти две группы?
4. Это всего лишь пример, количество групп и уникальных значений неизвестно. Исходные данные состоят из миллионов записей.
5. По информации здесь, ищем
sh
иnd
было бы достаточно.
Ответ №1:
Вы можете использовать difflib.get_close_matches
Ввод:
>>> s = pd.Series(['Hindi', 'hindi', 'hendi', 'English', 'Englsh', 'inglish', 'inglsh'])
>>> s
0 Hindi
1 hindi
2 hendi
3 English
4 Englsh
5 inglish
6 inglsh
обработка:
import difflib
s.apply(lambda s: difflib.get_close_matches(s, possibilities=['english', 'hindi'])[0])
выход:
0 hindi
1 hindi
2 hindi
3 english
4 english
5 english
6 english
Ответ №2:
Предполагая, что уникальные значения малы и известны, вы можете попробовать набрать слово со всеми уникальными значениями и назначить слово набору данных, уникальное значение которого имеет наибольшее значение.
Здесь вы можете попробовать несколько механизмов подсчета очков, таких как расстояние Левенштейна.
Например:
dataset = ['hindi', 'hundi', 'hendi', 'inglish', 'english', 'englesh']
unique_values = ['hindi', 'english']
segregated_dataset = {'hindi': [], 'english': []}
for val in dataset:
max_score = 0
for unique_val in unique_values:
score = scoring_function(val, unique_val) # implement the scoring function of your choice
if score > max_score:
field = unique_val
max_score = score
segregated_dataset[field].append(val)
Ответ №3:
Поскольку правильный набор необходимых слов неизвестен, один из возможных ответов на ваши вопросы может заключаться в этом вопросе.
Лучше преобразовать ваши слова в нижний регистр, используя numpy.char.lower(list_of_word)