Python Pandas Dataframe поиск текста в ячейках - PullRequest
1 голос
/ 16 октября 2019

Это мой первый пост о stackoverflow :) Я начал изучать библиотеки Python и pandas. У меня проблема с поиском текста в ячейке данных.

Программа:

Импорт двух файлов CSV (здесь нет проблем):

1Датафрейм:

Column1  | Column2
546852   | Lorem ipsum dolor sit amet
248597   | Amet luctus venenatis lectus magna fringilla.
842457   |  Neque egestas congue quisque egestas.
8465     | Amet luctus venenatis lectus
648      |  Neque egestas congue 
55       | Lorem ipsum dolor 

2DДафрейм:

DATA 
Lorem 
Lectus 
Congue
etc.

Мой вопрос: Как найти слово из 2dataframe (Lorem, Lectus, Congue и т. Д.) В 1Dataframe.columna2 и сгенерировать фрейм данных с 3 столбцами:

Column1  | Column2                                                | Column3 
546852   | **Lorem** ipsum dolor sit amet                         | Lorem 
248597   | Amet **luctus** venenatis lectus magna fringilla.      | Lectus 
842457   |  Neque egestas **congue** quisque egestas.             | Congue 
8465     | Amet **luctus** venenatis lectus                       | Lectus 
648      |  Neque egestascongue  **congue**                       | Congue  
55       | **Lorem** ipsum dolor                                  | Lorem

Я искал в Google, но не сделалнайти любое решение. Наконец, я осмелился написать сообщение на stackoverflow:)

Ответы [ 3 ]

1 голос
/ 16 октября 2019

Если вы хотите получить все возможные случаи, вы можете использовать следующую функцию. Имейте в виду, что вы должны иметь дело и со строчными буквами.

lst = [l.lower() for l in df2["DATA"].unique().to_list()]

def fun(x):
    x = x["Column2"].lower()
    return [l.capitalize() for l in lst if l in x]

df1["Column3"] = df1.apply(fun, axis=1)
1 голос
/ 16 октября 2019

Это так:


def find_elements(row):
    for element in df2.Data.unique():
        if row.Column2.str.contains(element):
            return element

df3 = df1.copy()
df3["Column3"] = df3.apply(find_elements, axis=1)

Это должно сработать, конечно, вы можете найти другой способ сделать это.

Редактировать: Как упомянуто @vb_rises, если несколько слов вв том же предложении функция вернет только первое совпадение.

0 голосов
/ 16 октября 2019

Использование Series.apply + лямбда-функция с учетом списка для случая, когда в ячейке содержится более одного слова:

df1['Column3']=df1['Column2'].apply(lambda x: [word  for word in df2['DATA'] if word.upper() in x.upper()])
print(df1)

   Column1                                        Column2   Column3
0   546852                     Lorem,ipsum,dolor,sit,amet   [Lorem]
1   248597  Amet,luctus,venenatis,lectus,magna,fringilla.  [Lectus]
2   842457          Neque,egestas,congue,quisque,egestas.  [Congue]
3     8465                   Amet,luctus,venenatis,lectus  [Lectus]
4      648                           Neque,egestas,congue  [Congue]
5       55                              Lorem,ipsum,dolor   [Lorem]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...