Python Как найти ключевое слово внутри столбца таблицы данных после преобразования текстов полей в строчные буквы? - PullRequest
1 голос
/ 05 апреля 2020

Мне нужно найти ключевое слово в поле Excel.

Первое, что я хочу сделать, это преобразовать это поле в нижний регистр:

import pandas as pd

data = pd.read_excel('data.xlsx', sheet_name = 1)

Поэтому я использовал следующее:

data['Notes']=(map(str.upper, data['Notes']))

Где Notes - поле, которое я хочу использовать. Но функция возвращает что-то вроде этого для каждой ячейки:

Я пробовал, используя list():

data['Notes']=list(map(str.upper, data['Notes']))

Но я получил ошибка:

дескриптор 'lower' требует объекта 'str', но получил 'map'

Для поиска я сделал следующее:

keywords = ['reception', 'warehouse', 'under construction', 'construction']
data['new field'] = ''
for note in data['Notes']:
    for keyword in keywords:
        if keyword in note:
            data['new field'] = True
        else:
            data['new field'] = False

Но new_field всегда содержит False.

Ответы [ 3 ]

2 голосов
/ 05 апреля 2020

Если вы хотите в нижнем регистре столбец в pandas данных. Это должно быть:

data['Notes'] = data['Notes'].str.lower()
# NOT THIS: data['Notes']=(map(str.upper, data['Notes']))

Теперь вы можете попробовать зациклить его и проверить:

keywords = ['reception', 'warehouse', 'under construction', 'construction']
data['new field'] = ''
for note in data['Notes']:
    if note in keywords:
        data['new field'] = True
    else:
        data['new field'] = False
1 голос
/ 05 апреля 2020

Самый быстрый способ достижения sh - это использовать pandas 'встроенный str.contains метод:

keywords = ['reception', 'warehouse', 'under construction', 'construction']
# make a regular expression of the keywords
kw_re = "|".join(keywords)

# Will return true is there is a match
data['New Field'] = data['Notes'].str.contains(kw_re, regex=True)

См. Полную документацию здесь .

1 голос
/ 05 апреля 2020

Использовать df ["столбец"]. Str.contains

df["Notes"] = df["Notes"].str.lower()

# Separate your keywords with a |, like you would with commas in an array
#                                          [key, words] 
df["New Value"] = df["Notes"].str.contains("key|words")
...