1。
2.
我有下面的pandas DataFrame,其中(我想是?(一个字符串作为列"中的嵌套JSON;桶";。
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
我想知道我如何访问列"中的值;"桶";,这样我就可以创建一个具有相应值的新列:
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。Series.str.extract
如果bucket
列中的值属于string
类型,我们可以将extract
与regex
模式一起使用
df['color'] = df['bucket'].str.extract(r'"color":"([^"]+)"', expand=False)
2.Series.str.get
否则,如果列bucket
中的值属于dict
类型,则可以使用str.get
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
只需使用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