首页 > 解决方案 > DataFrame:基于字符串字典/json的其他列的新列

问题描述

我在“bucket”列中使用(我猜?)作为嵌套 JSON 的字符串跟随 pandas DataFrame。

    id      name    bucket
0   11324   Soaps   {"page":{"url":"https://www.url.com", "color":"white"} ...}
0   11325   Cans    {"page":{"url":"https://www.url.com", "color":"black"} ...}
0   11326   Boxes   {"page":{"url":"https://www.url.com", "color":"red"} ...}

以下是数据类型:

dtypes
id                           int64
name                         object
bucket                       object

我想知道如何访问“bucket”列中的值,以便可以创建一个具有相应值的新列:

    id      name    bucket.                                                          color
0   11324   Soaps   {"web":{"project":"https://www.url1.com", "color":"white"} ...}  white
0   11325   Cans    {"web":{"project":"https://www.url2.com", "color":"white"} ...}  black
0   11326   Boxes   {"web":{"project":"https://www.url3.com", "color":"white"} ...}  red

标签: pythonjsonpandasstringdictionary

解决方案


1.Series.str.extract

如果列中的值属于类型,我们可以使用extractwith regexpatternbucketstring

df['color'] = df['bucket'].str.extract(r'"color":"([^"]+)"', expand=False)

2.Series.str.get

str.get否则,如果列bucket中的值属于类型,我们可以使用dict

df['color'] = df['bucket'].str.get('page').str.get('color')

>>> df

      id   name                                                   bucket  color
0  11324  Soaps  {"page":{"url":"https://www.url.com", "color":"white"}}  white
0  11325   Cans  {"page":{"url":"https://www.url.com", "color":"black"}}  black
0  11326  Boxes    {"page":{"url":"https://www.url.com", "color":"red"}}    red

推荐阅读