我目前正在使用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)
但是它为我提供了每个键的新列,并且不能处理跟随者列表的长度不均匀的情况。
是否有一种聪明的方法可以将我拥有的字典结构转换为数据框?还是应该以不同的方式存储初始数据?
答案 0 :(得分:1)
对元组使用列表理解,并传递给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 follower
0 realDonaldTrump 123456
1 realDonaldTrump 123457
2 BarackObama 999990
3 BarackObama 999991
4 BarackObama 999992
答案 1 :(得分:1)
创建兼容的字典:
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 followers
0 realDonaldTrump 123456
1 realDonaldTrump 123457
2 realDonaldTrump 123458
3 BarackObama 999990
4 BarackObama 999991
5 BarackObama 999992
答案 2 :(得分:1)
import pandas as pd
followers = {
'realDonaldTrump': [123456, 123457, 123458],
'BarackObama': [999990, 999991, 999992]
}
df = pd.DataFrame()
i = 0
for user in followers:
for r in followers[user]:
df.loc[i, 'user'] = user
df.loc[i, 'record'] = r
i = i + 1
print(df)
结果:
user record
0 realDonaldTrump 123456
1 realDonaldTrump 123457
2 realDonaldTrump 123458
3 BarackObama 999990
4 BarackObama 999991
5 BarackObama 999992