Python DataFrame:基于其他列的新列,带有字符串dictionary/json
我在“bucket”列中使用了一个字符串作为嵌套的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.
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