从数据框中的字典中提取信息
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')
使用 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')