如何将多个句子(存储在列表中)添加到pandas数据帧中

时间:2018-04-13 14:51:52

标签: python-2.7 pandas

我想根据用户评论创建一个方面分析。评论包含各个方面,因此评论需要分成句子。我将数据保存在pandas数据帧中,并用nltk库分隔句子。

我将单独的句子放在我想要格式化为数据帧的列表中并连接到原始数据帧。但是,我收到一个错误。我获得了19个新列,而不是额外的列。 (单个句子不存储在单元格中,我认为每个句子都有自己的列)我也测试了itertools但我也得到了错误的记录。

有人可以帮助我获得正确的格式吗?

我想要一个看起来像这样的新数据框:

U_REVIEW                                                                                      | SENTENCES
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Im a Sentence. Iam another Sentence in a Row.                                                 |[u'Im a Sentence', u'Iam another Sentence in a Row.']
Here we go, next Sentence. Blub, more blubs.                                                  |[u"Here weg o, next Sentence.", u'Blub, more blubs.']
Once again, more Sentence. And some other information. The Restaurant was ok, but not awesome.|[u"Once again, more Sentence.", u'And some other information.',u’The Restaurant was ok, but not awesome.’]

这就是我的代码的样子:

ta = ta[['U_REVIEW']]

Output:
U_REVIEW
Im a Sentence. Iam another Sentence in a Row.
Here we go, next Sentence. Blub, more blubs.
Once again, more Sentence. And some other information. The Restaurant was ok, but not awesome.

# the empty lists
sentences = []
ss = []

for sentence in ta['U_REVIEW']:
    # seperates the review into sentence
    sentence = sent_tokenize(sentence)
    sentences.append(sentence)
    test = itertools.chain(sentences)

#new dataframe to add the Sentences
df2 = pd.DataFrame(sentences)

#create Column
cols2 = ['REVIEW_SENTENCES']

# bring the two dataframes together
df2 = pd.DataFrame(sentences, columns=cols2)



Output of senteces:
[[u'Im a Sentence', u'Iam another Sentence in a Row.'],[u"Here weg o, next     Sentence.", u'Blub, more blubs.'],[u"Once again, more Sentence.", u'And some other information.',u’The Restaurant was ok, but not awesome.’]]

Output of test:
<itertools.chain object at 0x000000001316DC18>

Output and Information of the new Dataframe df2:
AssertionError: 1 columns passed, passed data had 19 columns

U_REVIEW                                                                                      | 0                        | 1                             | 2 ...
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Im a Sentence. Iam another Sentence in a Row.                                                 |Im a Sentence             |Iam another Sentence in a Row. | 
Here we go, next Sentence. Blub, more blubs.                                                  |Here we go, next Sentence.|Blub, more blubs.              |
Once again, more Sentence. And some other information. The Restaurant was ok, but not awesome.|Once again, more Sentence.|And some other information.    |The Restaurant was ok, but not awesome.

以下是Dataframe的Testset:

import pandas as pd
ta = pd.DataFrame( ['Im a Sentence. Iam another Sentence in a Row','Here we go, next Sentence. Blub, more blubs.','Once again, more Sentence. And some other information. The Restaurant was ok, but not awsome.'])
ta.columns =['U_REVIEW']

1 个答案:

答案 0 :(得分:0)

尝试这个我已经在python 3.5中完成了它我认为它也适用于2.5:

In [45]: df = pd.DataFrame(ta.U_REVIEW.str.split('.',expand=True).replace('',np.nan).fillna(np.nan).values.flatten()).dropna()

In [46]: df
Out[46]: 
                                         0
0                            Im a Sentence
1            Iam another Sentence in a Row
4                Here we go, next Sentence
5                         Blub, more blubs
8                Once again, more Sentence
9               And some other information
10   The Restaurant was ok, but not awsome

这就是你想要的:

ta.U_REVIEW.str.split('.',expand=True)
Out[50]: 
                           0                               1  \
0              Im a Sentence   Iam another Sentence in a Row   
1  Here we go, next Sentence                Blub, more blubs   
2  Once again, more Sentence      And some other information   

                                        2     3  
0                                    None  None  
1                                          None  
2   The Restaurant was ok, but not awsome   

In [52]: ta.U_REVIEW.str.split('.').apply(list)
Out[52]: 
0      [Im a Sentence,  Iam another Sentence in a Row]
1     [Here we go, next Sentence,  Blub, more blubs, ]
2    [Once again, more Sentence,  And some other in...
Name: U_REVIEW, dtype: object