将来自多个子Redd的PRAW结果附加到一个数据帧

时间:2019-07-22 16:13:26

标签: python python-3.x pandas praw

我目前正在使用PRAW来从多个不同的子reddit中获取结果,并尝试将每个子reddit中的每个结果归为一个数据帧。

现在,它可以很好地与一个subreddit配合使用,但是一旦我传入了一个subreddit列表,它就会覆盖前一个的结果,并返回最近完成的subreddit。出于某种原因,我觉得这应该是微不足道的,但是我正在绘制一个完整的空白。

这是我现在拥有的代码:

sub_list = ['5 different subreddits']

for sub in sub_list:

    print('Working on this sub right now: \n', sub)

    subreddit = protest_sniffer.subreddit(sub)

    cont_subreddit = subreddit.controversial(limit=1000)

    topics_dict = { "title":[], \
                    "score":[], \
                    "id":[], "url":[], \
                    "comms_num": [], \
                    "created": [], \
                    "body":[]}
    count = 0

    for submission in cont_subreddit:
        topics_dict["title"].append(submission.title)
        topics_dict["score"].append(submission.score)
        topics_dict["id"].append(submission.id)
        topics_dict["url"].append(submission.url)
        topics_dict["comms_num"].append(submission.num_comments)
        topics_dict["created"].append(submission.created)
        topics_dict["body"].append(submission.selftext)

        count += 1
        progress = round(100 * (count/1000), 1)
        print('%s percent finished' % progress)

topics_data = pd.DataFrame(topics_dict)
print(topics_data.describe())

2 个答案:

答案 0 :(得分:1)

由于topics_dict是在第一个循环中定义的,因此subreddit的每次新迭代都会用包含空列表的字典覆盖以前的字典。我想尝试将其移出循环。

sub_list = ['5 different subreddits']

topics_dict = { "title":[], \
                    "score":[], \
                    "id":[], "url":[], \
                    "comms_num": [], \
                    "created": [], \
                    "body":[]}

for sub in sub_list:
    ...

答案 1 :(得分:0)

您是否尝试过将topics_data放入for循环中?这就是我为什么每次都会覆盖结果的猜测。

我无法运行代码,所以这是我想到的伪代码。

data = []
sub_list = ['datascience', 'python']
for sub in sub_list:
    ...
    topics_dict = ...
    ...
    for submission in cont_subreddit:
        ...
        ...

    topics_data = pd.DataFrame(topics_dict)
    data.append(topics_data)

df = pd.concat(data)

让我知道是否有帮助。