从数据框中的字典中提取信息

Extracting information from a dictionary within a dataframe

使用 Python 中的模块 facebook_scraper 我想提取 posts 的 Facebook 评论文本来对某个页面进行情感分析。

内置函数get_posts

的用法如下
from facebook_scraper import get_posts
import pandas as pd

for post in get_posts('PAGE_NAME', extra_info=True, pages=50, options={"comments": True}):
    post_entry = post
    fb_post_df = pd.DataFrame.from_dict(post_entry, orient='index')
    fb_post_df = fb_post_df.transpose()    
    post_df_full = post_df_full.append(fb_post_df)
    print(post['post_id']+' get')

可以将 post 信息抓取到数据框 fb_post_df 中,看起来像这样(只有相关列的压缩版本,因为函数 returns df 有 50 列):

post_id text ... comments_full
12345 'text of the post' ... [{'comment_id': '12345', 'comment_url': 'https://facebook.com/12345', 'commenter_id': '12345', 'commenter_url': None, 'commenter_name': 'Jane Doe', 'commenter_meta': None, 'comment_text': 'THIS PIECE I NEED, TEXT OF THE COMMENT', 'comment_time': 2022-02-23 10:01:38, 'comment_image': None, 'comment_reactors': [], 'comment_reactions': None, 'comment_reaction_count': None, 'replies': []}]

列comments_full的dtype是一个对象。

我试过使用 pandas' from_dict 来生成一个仅由评论文本组成的新数据框,但它似乎无法将列的内容识别为字典 - 因为它是一个字典列表(如果有意义的话)。

请注意,如果 post 没有评论,则该列可以为空,在这种情况下,该列的内容如下所示: []

列表理解应该可以解决问题:

post_df_full['comments_full'].apply(lambda x: [y['comment_text'] for y in x] if x else 'no comment')