我试图提取subject-verb-object三元组,然后附加一个ID。我正在使用一个循环所以我的提取三元组列表保持行的结果是没有三元组被发现。所以它看起来像:
[]
[trump,carried,energy]
[]
[clinton,doesn't,trust]
当我打印mylist时,它看起来像预期的那样。
然而,当我尝试从mylist创建一个数据帧时,我得到一个由空行引起的错误
`IndexError: list index out of range`.
我试图包含一个if语句来避免这种情况,但问题是一样的。我也试过使用reindex,但是df2是空的。
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import spacy
import textacy
import csv, string, re
import numpy as np
import pandas as pd
#Import csv file with pre-processing already carried out
import pandas as pd
df = pd.read_csv("pre-processed_file_1.csv", sep=",")
#Prepare dataframe to be relevant columns and unicode
df1 = df[['text_1', 'id']].copy()
import StringIO
s = StringIO.StringIO()
tweets = df1.to_csv(encoding='utf-8');
nlp = spacy.load('en')
count = 0;
df2 = pd.DataFrame();
for row in df1.iterrows():
doc = nlp(unicode(row));
text_ext = textacy.extract.subject_verb_object_triples(doc);
tweetID = df['id'].tolist();
mylist = list(text_ext)
count = count + 1;
if (mylist):
df2 = df2.append(mylist, ignore_index=True)
else:
df2 = df2.append('0','0','0')
非常感谢任何帮助。谢谢!
答案 0 :(得分:0)
您应该将DataFrame形状的对象传递给append
。传递原始数据不起作用。所以df2=df2.append([['0','0','0']],ignore_index=True)
您还可以将处理包装在函数process_row
中,然后执行df2 = pd.DataFrame([process_row(row) for row in df1.iterrows()])
。请注意,虽然append
不适用于空行,但DataFrame构造函数只会使用None
填充它们。如果您希望空行为['0','0','0']
,则有几个选项:
- 为空行返回['0','0','0']
处理函数 - 将列表理解改为[process_row(row) if process_row(row) else ['0','0','0'] for row in df1.iterrows()]
-Do df2=df2.fillna('0')