python - 获取存储在数据框列中的键值?
问题描述
我有一个如下所示的数据框:
user_id event_desc
100013 {'firebase_screen': '/product-popup', 'banner_id': '9260'}
100022 {'firebase_screen': '/product-popup', 'banner_id': '9152'}
100076 {'firebase_screen_id': '-1531185473150377061'}
100076 {'banner_id': '8567', 'firebase_screen': '/product-popup'}
我正在尝试获取键banner_id 的值。
所以,输出如下:
user_id event_desc banner_id
100013 {'firebase_screen': '/product-popup', 'banner_id': '9260'} 9260
100022 {'firebase_screen': '/product-popup', 'banner_id': '9152'} 9151
100076 {'firebase_screen_id': '-1531185473150377061'} Nan
100076 {'banner_id': '8567', 'firebase_screen': '/product-popup'} 8567
我正在使用下面的代码。
df['banner_id'] = df['event_desc'].apply(lambda x: x.get('banner_id'))
它给出了错误:
“str”对象没有属性“get”
解决方案
只要这些不存储为字符串,它就可以工作:
import pandas as pd
df = pd.DataFrame([
[100013, {'firebase_screen': '/product-popup', 'banner_id': '9260'}],
[100022, {'firebase_screen': '/product-popup', 'banner_id': '9152'}],
[100076 , {'firebase_screen_id': '-1531185473150377061'}],
[100076 , {'banner_id': '8567', 'firebase_screen': '/product-popup'}]], columns =['user_id', 'event_desc'])
df['banner_id'] = df['event_desc'].apply(lambda x: x.get('banner_id'))
我的猜测是,根据您的错误,该列不是字典列,而是字符串列:
import pandas as pd
df = pd.DataFrame([
[100013, "{'firebase_screen': '/product-popup', 'banner_id': '9260'}"],
[100022, "{'firebase_screen': '/product-popup', 'banner_id': '9152'}"],
[100076 , "{'firebase_screen_id': '-1531185473150377061'}"],
[100076 , "{'banner_id': '8567', 'firebase_screen': '/product-popup'}"]], columns =['user_id', 'event_desc'])
df['banner_id'] = df['event_desc'].apply(lambda x: x.get('banner_id'))
AttributeError: 'str' object has no attribute 'get'
因此,如果是这种情况,您将需要使用:
import pandas as pd
import ast
df = pd.DataFrame([
[100013, "{'firebase_screen': '/product-popup', 'banner_id': '9260'}"],
[100022, "{'firebase_screen': '/product-popup', 'banner_id': '9152'}"],
[100076 , "{'firebase_screen_id': '-1531185473150377061'}"],
[100076 , "{'banner_id': '8567', 'firebase_screen': '/product-popup'}"]], columns =['user_id', 'event_desc'])
df['banner_id'] = df['event_desc'].apply(lambda x: ast.literal_eval(x).get('banner_id'))
额外的:
import pandas as pd
import ast
def eval_code(code):
parsed = ast.parse(code, mode='eval')
fixed = ast.fix_missing_locations(parsed)
compiled = compile(fixed, '<string>', 'eval')
return eval(compiled)
df = pd.DataFrame([
[100013, "{'firebase_screen': '/product-popup', 'banner_id': '9260'}"],
[100022, "{'firebase_screen': '/product-popup', 'banner_id': '9152'}"],
[100076 , "{'firebase_screen_id': '-1531185473150377061'}"],
[100076 , "{'banner_id': '8567', 'firebase_screen': '/product-popup'}"]], columns =['user_id', 'event_desc'])
df['banner_id'] = df['event_desc'].apply(lambda x: eval_code(x).get('banner_id'))
推荐阅读
- jenkins - 将赛普拉斯与 Jenkins 集成
- elasticsearch - ElasticSearch 查询以填充或附加值到字段
- ios - 如何使用 React-Native 播放原生 ios Keyboard Touch 声音?
- c - c语言中goto语句的使用频率是多少?
- excel - 将 CSV(Excel 表)导入 SQLite?
- android - 如果登录,如何仅在导航抽屉上显示片段
- swift-nio - SwiftNIO:发送和接收 UDP 广播
- android - 如何在 ConstraintLayout 中放置背景形状?
- python - 简单的脚本是在数学中添加随机零?
- expo - 如何在开发过程中获取链接以重定向到 expo 应用程序