一尘不染

Python:Dictionary系列的Pandas数据框

python

我有一个熊猫数据框:

type(original)
pandas.core.frame.DataFrame

其中包括系列对象original['user']

type(original['user'])
pandas.core.series.Series

original['user'] 指出了一些命令:

type(original['user'].ix[0])
dict

每个字典具有相同的键:

original['user'].ix[0].keys()

[u'follow_request_sent',
 u'profile_use_background_image',
 u'profile_text_color',
 u'id',
 u'verified',
 u'profile_location',
 # ... keys removed for brevity
]

上面是tweeter
APIuser的tweet中字段的命令之一(一部分)。我想根据这些命令构建数据框架。

当我尝试直接制作数据框时,每行仅获得一列,并且此列包含整个字典:

pd.DataFrame(original['user'][:2])
    user
0   {u'follow_request_sent': False, u'profile_use_...
1   {u'follow_request_sent': False, u'profile_use_..

当我尝试使用from_dict()创建数据框时,得到相同的结果:

pd.DataFrame.from_dict(original['user'][:2])

    user
0   {u'follow_request_sent': False, u'profile_use_...
1   {u'follow_request_sent': False, u'profile_use_..

接下来,我尝试了列表理解,但返回了错误:

item = [[k, v] for (k,v) in users]
ValueError: too many values to unpack

当我从单行创建数据框时,它几乎可以正常工作:

df = pd.DataFrame.from_dict(original['user'].ix[0])
df.reset_index()

    index   contributors_enabled    created_at  default_profile     default_profile_image   description     entities    favourites_count    follow_request_sent     followers_count     following   friends_count   geo_enabled     id  id_str  is_translation_enabled  is_translator   lang    listed_count    location    name    notifications   profile_background_color    profile_background_image_url    profile_background_image_url_https  profile_background_tile     profile_image_url   profile_image_url_https     profile_link_color  profile_location    profile_sidebar_border_color    profile_sidebar_fill_color  profile_text_color  profile_use_background_image    protected   screen_name     statuses_count  time_zone   url     utc_offset  verified
0   description     False   Mon May 26 11:58:40 +0000 2014  True    False       {u'urls': []}   0   False   157

除了将description字段设置为默认索引外,它的工作方式几乎与我想要的一样。

每个字典有40个键,但我只需要10个键,并且在数据框中有28734行。

如何过滤不需要的密钥?


阅读 144

收藏
2020-12-20

共1个答案

一尘不染

我将尝试做的是以下内容:

new_df = pd.DataFrame(list(original['user']))

这会将系列转换为列表,然后将其传递给pandas数据框,其余部分应由其负责。

2020-12-20