猿问

如何从具有唯一键和值的字典中创建数据框作为列表?

我目前正在使用 Tweepy 从 Twitter API 中抓取一些用户//关注者信息。我目前将数据存储为字典,其中每个键都是唯一的 twitter 用户,值是其关注者的 ID 列表。


数据如下所示:


{'realDonaldTrump': [

    123456,

    123457,

    123458,

    ...

    ],

 'BarackObama' : [

    999990,

    999991,

    999992,

    ...

    ]}

我需要的是一个看起来像这样的数据框:


user             follower

realDonaldTrump  123456

realDonaldTrump  123457

realDonaldTrump  123458

...              ...

BarackObama      999990

BarackObama      999991

BarackObama      999992

...              ...

我已经尝试过:


df = pd.DataFrame.from_dict(followers)

但它为每个键提供了一个新列,并且不处理不均匀长度的关注者列表。


有没有一种聪明的方法可以将我拥有的字典结构转换为数据框?或者我应该以不同的方式存储初始数据?我目前正在使用 Tweepy 从 Twitter API 中抓取一些用户//关注者信息。我目前将数据存储为字典,其中每个键都是唯一的 twitter 用户,值是其关注者的 ID 列表。


数据如下所示:


{'realDonaldTrump': [

    123456,

    123457,

    123458,

    ...

    ],

 'BarackObama' : [

    999990,

    999991,

    999992,

    ...

    ]}

我需要的是一个看起来像这样的数据框:


user             follower

realDonaldTrump  123456

realDonaldTrump  123457

realDonaldTrump  123458

...              ...

BarackObama      999990

BarackObama      999991

BarackObama      999992

...              ...

我已经尝试过:


df = pd.DataFrame.from_dict(followers)

但它为每个键提供了一个新列,并且不处理不均匀长度的关注者列表。


有没有一种聪明的方法可以将我拥有的字典结构转换为数据框?或者我应该以不同的方式存储初始数据?


qq_遁去的一_1
浏览 142回答 3
3回答

慕无忌1623718

对元组使用列表推导并传递给 DataFrame 构造函数:followers = {'realDonaldTrump': [    123456,    123457    ], 'BarackObama' : [    999990,    999991,    999992    ]}df = pd.DataFrame([(k, x) for k, v in followers.items() for x in v],                    columns=['user','follower'])print (df)              user  follower0  realDonaldTrump    1234561  realDonaldTrump    1234572      BarackObama    9999903      BarackObama    9999914      BarackObama    999992

交互式爱情

创建一个兼容的字典:final_dict = {'users':[], 'followers':[]}for key in followers:  for i in range(len(followers[key])):    final_dict['users'].append(key)    final_dict['followers'].append(followers[key][i])df = pd.DataFrame.from_dict(final_dict)输出:    users           followers0   realDonaldTrump 1234561   realDonaldTrump 1234572   realDonaldTrump 1234583   BarackObama     9999904   BarackObama     9999915   BarackObama     999992

守着星空守着你

import pandas as pdfollowers = {    'realDonaldTrump': [123456, 123457, 123458],    'BarackObama': [999990, 999991, 999992]}df = pd.DataFrame()i = 0for user in followers:    for r in followers[user]:        df.loc[i, 'user'] = user        df.loc[i, 'record'] = r        i = i + 1print(df)结果:             user    record0  realDonaldTrump  1234561  realDonaldTrump  1234572  realDonaldTrump  1234583      BarackObama  9999904      BarackObama  9999915      BarackObama  999992
随时随地看视频慕课网APP

相关分类

Python
我要回答