Python DataFrame:基于其他列的新列,带有字符串dictionary/json

Python DataFrame:基于其他列的新列,带有字符串dictionary/json,python,json,pandas,string,dictionary,Python,Json,Pandas,String,Dictionary,我在“bucket”列中使用了一个字符串作为嵌套的JSON 以下是数据类型: dtypes id int64 name object bucket object 我想知道如何访问列“bucket”中的值,以便使用相应的值创建一个新列: id name bucket.

我在“bucket”列中使用了一个字符串作为嵌套的JSON

以下是数据类型:

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
只需使用
eval()
方法和
apply()
方法:

df['bucket']=df['bucket'].apply(lambda x:eval(x))
现在最后:

df['color']=df['bucket'].apply(lambda x:list(x.values())[0]['color'])
现在,如果您打印df,您将获得所需的输出:

    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
1. <代码>系列.str.extract 如果
bucket
列中的值类型为
string

df['color'] = df['bucket'].str.extract(r'"color":"([^"]+)"', expand=False)
2.
Series.str.get
否则,如果列
bucket
中的值属于类型
dict

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

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