Создание фрейма данных pandas путем фильтрации словаря с вложенными словарями - PullRequest
0 голосов
/ 22 октября 2019

Я пытаюсь создать фрейм данных pandas, используя всего несколько столбцов из словаря. Словарь - это просто ._json объекта User из API Twitter.

Я уже достиг того, чего хочу, путем перебора каждого пользователя и удаления каждого нежелательного ключа, однако это слишком дорого. Чтобы избежать этого, я пытаюсь использовать:


data = 
[{'id': 1085741390527692800,
  'status': {'created_at': 'Tue Aug 06 01:56:58 +0000 2019',
             'entities': {'hashtags': []},
             'id': 1158557544052379649,
             'id_str': '1158557544052379649',
             'text': '@EnCicla Se tiene alguna fecha prevista para activar la '
                     'estación de Parques del Rio?',
             'truncated': False}}]

Это всего лишь пример (я удалил некоторые ключи из вложенного словаря) двух ключей из пользовательского объекта. Я пытаюсь сделать следующее:

df = pd.DataFrame(columns = cols)

for column in df.columns:
    df[column] = list(map(lambda obj: obj[column]), data)

Однако я получаю сообщение об ошибке:

Ошибка типа: строковые индексы должны быть целыми числами

Я также пытался использовать панд.io.json_normalize и затем фильтрует созданный информационный кадр, но это также будет слишком дорого.

Редактировать:

Хорошо, извините за ошибки. Я просто дам вам весь словарь:

data = {'id': 1085741390527692800,
 'id_str': '1085741390527692800',
 'name': 'Ramon',
 'screen_name': 'Ramon15862280',
 'location': '',
 'profile_location': None,
 'description': '',
 'url': None,
 'entities': {'description': {'urls': []}},
 'protected': False,
 'followers_count': 0,
 'friends_count': 5,
 'listed_count': 0,
 'created_at': 'Thu Jan 17 03:31:34 +0000 2019',
 'favourites_count': 0,
 'utc_offset': None,
 'time_zone': None,
 'geo_enabled': False,
 'verified': False,
 'statuses_count': 3,
 'lang': None,
 'status': {'created_at': 'Tue Aug 06 01:56:58 +0000 2019',
  'id': 1158557544052379649,
  'id_str': '1158557544052379649',
  'text': '@EnCicla Se tiene alguna fecha prevista para activar la estación de Parques del Rio?',
  'truncated': False,
  'entities': {'hashtags': [],
   'symbols': [],
   'user_mentions': [{'screen_name': 'EnCicla',
     'name': 'EnCicla',
     'id': 387985142,
     'id_str': '387985142',
     'indices': [0, 8]}],
   'urls': []},
  'source': '<a href="https://mobile.twitter.com" rel="nofollow">Twitter Web App</a>',
  'in_reply_to_status_id': 1158425030986031104,
  'in_reply_to_status_id_str': '1158425030986031104',
  'in_reply_to_user_id': 387985142,
  'in_reply_to_user_id_str': '387985142',
  'in_reply_to_screen_name': 'EnCicla',
  'geo': None,
  'coordinates': None,
  'place': None,
  'contributors': None,
  'is_quote_status': False,
  'retweet_count': 0,
  'favorite_count': 2,
  'favorited': False,
  'retweeted': False,
  'lang': 'es'},
 'contributors_enabled': False,
 'is_translator': False,
 'is_translation_enabled': False,
 'profile_background_color': 'F5F8FA',
 'profile_background_image_url': None,
 'profile_background_image_url_https': None,
 'profile_background_tile': False,
 'profile_image_url': 'http://abs.twimg.com/sticky/default_profile_images/default_profile_normal.png',
 'profile_image_url_https': 'https://abs.twimg.com/sticky/default_profile_images/default_profile_normal.png',
 'profile_link_color': '1DA1F2',
 'profile_sidebar_border_color': 'C0DEED',
 'profile_sidebar_fill_color': 'DDEEF6',
 'profile_text_color': '333333',
 'profile_use_background_image': True,
 'has_extended_profile': False,
 'default_profile': True,
 'default_profile_image': True,
 'following': False,
 'follow_request_sent': False,
 'notifications': False,
 'translator_type': 'none',
 'suspended': False,
 'needs_phone_verification': False}

И я бы хотел, например, отфильтровать ключи: «id» и «status».

...