Как разделить текст с несколькими предложениями в столбце на несколько строк в пандах Python? - PullRequest
0 голосов
/ 28 февраля 2019

Я пытаюсь разбить столбец комментариев на несколько строк, содержащих каждое предложение.Я использовал следующий поток StackOverflow для моей справки, поскольку он имеет тенденцию давать аналогичный результат. Ссылка на ссылку: pandas: Как разделить текст в столбце на несколько строк? Пример данных для данных приведен ниже.

Id Team Food_Text 1 X Food isхорошо.Это очень хорошо приготовлено.Вкусные!2 XI ненавижу кальмаров.Еда не приготовлена ​​хорошо.На самом деле так и есть.3 X Пожалуйста, не приносите пользы в любое время здесь 4 Y Я люблю рыбу.Потрясающий деликатес.5 Y Хорошо для десертов.Мясо имеет плохой вкус

Каждая запись для 'Food_Text' может состоять из нескольких предложений, разделенных точкой или точкой.Я использовал следующий код

import numpy as np
import pandas as pd

survey_data = pd.read_csv("Food_Dummy.csv")
survey_text = survey_data[['Id','Team','Food_Text']]

# Getting s as pandas series which has split on full stop and new sentence a new line         
s = survey_text["Food_Text"].str.split('.').apply(pd.Series,1).stack()
s.index = s.index.droplevel(-1) # to line up with df's index
s.name = 'Food_Text' # needs a name to join

# There are blank or emplty cell values after above process. Removing them
s.replace('', np.nan, inplace=True)
s.dropna(inplace=True)
x=s.to_frame(name='Food_Text1')
x.head(10)

# Joining should ideally get me proper output. But I am getting original dataframe instead of split one.
survey_text.join(x)
survey_text.head(10)

Я не уверен, почему объединение не дает мне правильный фрейм данных с большим количеством строк.Повторение других столбцов на основе индекса разделения.Таким образом, Id = 1 имеет 3 предложения, поэтому мы должны иметь 3 записи со всеми остальными данными одинаковыми и столбец Food_Text с новым предложением из комментария с ID = 1.Аналогично для других записей.

Заранее благодарю за помощь!С уважением, Сохил Шах

1 Ответ

0 голосов
/ 28 февраля 2019

В примере, который вы вставили в свой код, был напечатан результат join, поэтому, если вы хотите изменить значение вашего survey_text, код должен быть:

survey_text = survey_text.join(x)

или, если вы хотите упростить свой код, приведенный ниже код вполне подходит:

import numpy as np
import pandas as pd

survey_data = pd.read_csv("Food_Dummy.csv")
survey_text = survey_data[['Id','Team','Food_Text']]

# Getting s as pandas series which has split on full stop and new sentence a new line
s = survey_text["Food_Text"].str.split('.').apply(pd.Series,1).stack()
s.index = s.index.droplevel(-1) # to line up with df's index
s.name = 'Food_Text' # needs a name to join

# There are blank or emplty cell values after above process. Removing them
s.replace('', np.nan, inplace=True)
s.dropna(inplace=True)

# Joining should ideally get me proper output. But I am getting original dataframe instead of split one.
del survey_text['Food_Text']
survey_text = survey_text.join(s)
survey_text.head(10)

Таким образом у вас не будет нескольких столбцов "Food_Text" в вашем фрейме данных.

...