/ / Python pandas нечітка логіка - python, pandas, fuzzy-logic

Python pandas нечітка логіка - python, pandas, fuzzy-logic

Зараз у мене є набір даних, який повинен бути нечіткимлогіка приєдналася. Даний кадр df1 є меншою довідковою таблицею з приблизно 10 спостереженнями. Dataframe df2 - це мій основний кадр даних з приблизно 2000 спостереженнями, де необхідно виконати з'єднання нечіткої логіки. Нижче я наводжу приклад і свою спробу.

import difflib
df1 = pd.DataFrame({"number":[1,2,3,4,5],"not_shifted":["one","two","three","four","five"]})
df2 = pd.DataFrame({"values":[["test"],["a"],["b"],["c"],["d"],["e"],["f"],["f"],["f"]],"not_shifted":[np.nan,"one","too","three","fours","five","six",np.nan,"one"]})

# my approach
df2["not_shifted"] = df2["not_shifted"].map(lambda x: difflib.get_close_matches(x, df1["not_shifted"])[0])

Я отримую таку помилку: Список поза діапазоном

TypeError: об'єкт "float" не виконується

Якщо замінити np.nan на щось інше, я отримаю іншу помилку:

Список поза діапазоном

Відповіді:

1 для відповіді № 1

Ви отримуєте TypeError тому що dataframe df2 має nan значення, ви повинні видалити його.

Інша проблема: df1 не має правила для "шести" і df2["not_shifted"] = df2["not_shifted"].map(lambda x: difflib.get_close_matches(x, df1["not_shifted"])[0]) генерує помилку List out of range тому що один зі списків порожній.

Код буде виглядати (або ви можете використовувати ваш_підхід, якщо ви додаєте до df1 правило для "шість").

import pandas as pd
import numpy as np
import difflib

df1 = pd.DataFrame({"number":[1,2,3,4,5],"not_shifted":["one","two","three","four","five"]})
df2 = pd.DataFrame({"values":[["test"],["a"],["b"],["c"],["d"],["e"],["f"],["f"],["f"]],"not_shifted":[np.nan,"one","too","three","fours","five","six",np.nan,"one"]})

# Drop nan value
df2=df2.dropna()

# You cat write [0] because df1 does not have "six"
df2["not_shifted"] = df2["not_shifted"].map(lambda x: difflib.get_close_matches(x, df1["not_shifted"]))
print df2

Вихід:

  not_shifted values
1       [one]    [a]
2       [two]    [b]
3     [three]    [c]
4      [four]    [d]
5      [five]    [e]
6          []    [f]
8       [one]    [f]