python - 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
解决方案
1.Series.str.extract
如果列中的值属于类型,我们可以使用extract
with regex
patternbucket
string
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
推荐阅读
- android - 与其他动画集一起使用时,Android View.Animation 的大小会跳跃。为什么?
- sql - 使用动态列标题在 SQL QUERY 中透视表
- alert - 在 pine 脚本策略中创建警报
- wordpress - Woo-commerce 将默认重量单位文本从公斤更改为公斤,并在产品页面和附加信息中显示公斤
- c++ - 如何在我的源代码中包含外部库的头文件?
- firebase - AngularFirebase google 登录 idToken 有时会返回用户个人资料
- html - Vuetify 日期选择器不显示整个月
- docker - 如何在 vscode 之外构建和运行 .devcontainer 文件夹?
- google-apps-script - 将新数据附加到另一个工作表中
- reactjs - 如何从 getAllByTestId 中获取文本值?