2016-12-13 4 views
-1

Я работаю в jupyter ноутбук и имеют панды dataframe «данные»:питон панды dataframe слова в контексте: получить 3 слова до и после

Question_ID | Customer_ID | Answer 
     1   234   Data is very important to use because ... 
     2   234   We value data since we need it ... 

Я хочу, чтобы пройти через текст в колонке «Ответ» и получить три слова до и после слова «данные». Так что в этом случае я бы получил «очень важно»; «Мы ценим», «поскольку нам нужно».

Есть ли хороший способ сделать это в рамке данных pandas? До сих пор я нашел решения, где «Ответ» был бы собственным файлом, выполняемым через код python (без фрейма данных pandas). Хотя я понимаю, что мне нужно использовать библиотеку NLTK, я раньше не использовал ее, поэтому я не знаю, каким будет лучший подход. (Это было отличным примером Extracting a word and its prior 10 word context to a dataframe in Python)

+0

Вы можете показать исходную структуру структуры данных (а не ее выход)? – RomanPerekhrest

+0

Это просто csv, который я читал как кадр данных с данными = pd.read_csv ('U: \ data science \ data.csv') – jeangelj

+0

, так как вы хотите только три слова до и после «данных», не должен ваш пример быть «так как нам нужно», который не включает «это»? – davedwards

ответ

1

Это может работать:

import pandas as pd 
import re 

df = pd.read_csv('data.csv') 

for value in df.Answer.values: 
    non_data = re.split('Data|data', value) # split text removing "data" 
    terms_list = [term for term in non_data if len(term) > 0] # skip empty terms 
    substrs = [term.split()[0:3] for term in terms_list] # slice and grab first three terms 
    result = [' '.join(term) for term in substrs] # combine the terms back into substrings 
    print result 

:

['is very important'] 
['We value', 'since we need'] 
+0

спасибо, это сработало и мне дали примеры, но он также дал мне ту же ошибку «TypeError: ожидаемая строка или буфер»; есть ли способ указать столбец astype str? – jeangelj

+0

Какой номер строки дает вам TypeError? – davedwards

+0

Большое вам спасибо за помощь; Я очень ценю это; как я могу прикрепить фрагмент csv в stackoverflow? Я искал его, но, похоже, не поддерживается; это полная ошибка я получаю – jeangelj

0

Раствор с помощью выражение генератора, re.findall и itertools.chain.from_iterable функции:

import pandas as pd, re, itertools 

data = pd.read_csv('test.csv') # change with your current file path 

data_adjacents = ((i for sublist in (list(filter(None,t)) 
         for t in re.findall(r'(\w*?\s*\w*?\s*\w*?\s+)(?=\bdata\b)|(?<=\bdata\b)(\s+\w*\s*\w*\s*\w*)', l, re.I)) for i in sublist) 
          for l in data.Answer.tolist()) 

print(list(itertools.chain.from_iterable(data_adjacents))) 

Выход:

[' is very important', 'We value ', ' since we need'] 
+0

Я получаю эту ошибку TypeError: ожидаемая строка или буфер – jeangelj

+0

похоже, что вы передали неверный аргумент, проверьте строку, которая вызывает ошибку, и укажите ожидаемый тип – RomanPerekhrest

Смежные вопросы