Как сделать фрейм данных из словаря с уникальными ключами и значениями в виде списков? - PullRequest
1 голос
/ 23 сентября 2019

В настоящее время я собираю некоторую информацию о пользователе / ​​подписчике из API Twitter с помощью Tweepy.В настоящее время я храню данные в виде словаря, в котором каждый ключ является уникальным пользователем Twitter, а значения представляют собой список идентификаторов для их подписчиков.

Данные выглядят следующим образом:

{'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)

, но он дает мне новый столбец для каждого ключа и не 't обрабатывать списки подписчиков разной длины.

Есть ли умный способ преобразовать структуру словаря, которую я имею, в фрейм данных?Или я должен хранить исходные данные по-другому?

Ответы [ 3 ]

0 голосов
/ 23 сентября 2019

Создать совместимый файл:

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
0 голосов
/ 23 сентября 2019
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
0 голосов
/ 23 сентября 2019

Использовать понимание списка для кортежей и передать конструктору 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...