如何让熊猫从列表中的多个列表中获取值

时间:2021-02-24 21:12:58

标签: python pandas list dataframe nlp

我有一个包含多个 html 文件的文件夹。我希望代码遍历每个文件并使用 nlp 选择主语动词宾语三元组。然后我希望 Pandas 将所有文件都列在一个数据框中的所有文件的主语动词宾语标题下。我面临的问题是熊猫只列出了最后一个文件中的主语动词宾语,而不是前两个。当我在循环中打印 sub_verb_obj 时,它会在一个列表中显示 3 个列表。但是 pandas 不会选择 3 个列表三元组。有人能告诉我我做错了什么吗?


sub_verb_obj=[]
folder_path = 'C:/Users/user3/.ipynb_checkpoints/xyz/xyz_2018'
for filename in glob.glob(os.path.join(folder_path, '*.html')):
  with open(filename, 'r',encoding='utf-8') as f:
    pat = f.read()
    
    doc=nlp(text)
    text_ext = textacy.extract.subject_verb_object_triples(doc)
    sub_verb_obj=list(text_ext)
    
sao=pd.DataFrame(sub_verb_obj)
sao.columns=['subject','verb','object']
sao=sao.set_index('subject')
print(sao)```

how can I make sure the pandas lists all the subject verb object from all the files in a folder in a single dataframe?

1 个答案:

答案 0 :(得分:1)

因为您的数据在每次迭代中看起来都是一个元组列表,并且仅适用于一次运行,所以我建议在每个循环中构建一个数据框,将其存储在一个列表中,然后连接数据框列表

df_hold_list=[]
folder_path = 'C:/Users/user3/.ipynb_checkpoints/xyz/xyz_2018'
for filename in glob.glob(os.path.join(folder_path, '*.html')):
  with open(filename, 'r',encoding='utf-8') as f:
    pat = f.read()
    soup = BeautifulSoup(pat, 'html.parser')
    claim_section = soup.find_all('section', attrs={"itemprop":"claims"})
    str_sect  =  claim_section[0]
    claim_text=str_sect.get_text()
    #print(str(type(claim_section))) 
    clean_lower=claim_text.lower()
    text=clean_lower
    doc=nlp(text)
    text_ext = textacy.extract.subject_verb_object_triples(doc)
    sub_verb_obj=list(text_ext)
    df_hold_list.append(pd.DataFrame(sub_verb_obj)) # add each new dataframe here

sao=pd.concat(df_hold_list, axis=0) # this should concat all dfs on top of one another using axis=0
sao.columns=['subject','verb','object'] # change your columns on teh final df
sao=sao.set_index('subject')
print(sao)
相关问题