【问题标题】:how to make a pandas take values from multiple lists within a list如何让熊猫从列表中的多个列表中获取值
【发布时间】:2021-02-24 21:12:58
【问题描述】:

我有一个包含多个 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?

【问题讨论】:

    标签: python pandas list dataframe nlp


    【解决方案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)
    

    【讨论】:

    • ValueError: 长度不匹配:预期轴有 330 个元素,新值有 3 个元素.. Pandas 仍然不能捡起它
    • 没有数据和实际的错误堆栈,很难帮助你。你能准确地从 sub_verb_obj 发布数据吗?
    • 对于单个专利,我使用相同的代码但没有循环。我得到一个包含 3 列的输出,这些列读作主语动词对象和几行。现在对于一个包含多个文件的文件夹,我仍然希望 pandas 有 3 列相同的标题主题动词对象,但只是一个接一个地更新行。
    猜你喜欢
    • 1970-01-01
    • 2022-01-25
    • 2022-01-11
    • 2018-09-19
    • 1970-01-01
    • 1970-01-01
    • 2022-10-15
    • 2021-03-06
    • 1970-01-01
    相关资源
    最近更新 更多