首页 > 解决方案 > 将字典的结果转换为数据框

问题描述

从这个命令

from stackapi import StackAPI
lst = ['11786778','12370060']
df = pd.DataFrame(lst)
SITE = StackAPI('stackoverflow', key="xxxx")
results = []
for i in range(1,len(df)):
    SITE.max_pages=10000000
    SITE.page_size=100
    post = SITE.fetch('/users/{ids}/reputation-history', ids=lst[i])
    results.append(post)

结果变量打印json格式的结果如何将结果变量转换为具有五列的数据框?

声誉历史类型、声誉变化、post_id、creation_date、user_id

标签: pythonpandas

解决方案


在这里试试这个:

from stackapi import StackAPI
import pandas as pd
lst = ['11786778','12370060']
SITE = StackAPI('stackoverflow')
results = []
SITE.max_pages=10000000
SITE.page_size=100
for i in lst:
    post = SITE.fetch('/users/{ids}/reputation-history', ids=[i]).get('items')
    results.extend([list(j.values()) for j in post])
df = pd.DataFrame(results, columns = ['reputation_history_type', 'reputation_change', 'post_id', 'creation_date', 'user_id'])

输出

print(df.head())给出:

  reputation_history_type  reputation_change   post_id  creation_date     user_id
0    asker_accepts_answer                  2  59126012     1575207944  11786778.0
1        post_undownvoted                  2  59118819     1575139301  11786778.0
2            post_upvoted                 10  59118819     1575139301  11786778.0
3          post_downvoted                 -2  59118819     1575139299  11786778.0
4            post_upvoted                 10  59110166     1575094452  11786778.0

print(df.tail())给出:

    reputation_history_type  reputation_change   post_id  creation_date     user_id
170            post_upvoted                 10  58906292     1574036540  12370060.0
171         answer_accepted                 15  58896536     1573990105  12370060.0
172            post_upvoted                 10  58896044     1573972834  12370060.0
173          post_downvoted                  0  58896299     1573948372  12370060.0
174          post_downvoted                  0  58896158     1573947435  12370060.0

注意

  1. 您可以直接从结果中创建一个数据框,该结果将是列表列表。
  2. 您无需声明SITE.max_page,并且SIZE.page_size每次循环遍历lst.

推荐阅读