python - 有没有一种 Pythonic 方法来获取与失败的 dict 或 pandas 行分配相关的键?
问题描述
我有一个数据管道,我们将数据作为 pandas DataFrame 处理。我们需要对每一行进行一系列操作,其中某一列的某些操作依赖于其他列中的值,因此我们使用 pandas apply
,类似于:
def check_row(row):
if row['C'] == 'foo':
row['B'] += row['A']
row['C'] = row['C'].zfill(5)
#etc
return row
df = pd.DataFrame([(1, 2, 'foo'),
(4, 5, 'bar'),
(7,8,'baz')],
columns=['A', 'B', 'C'])
df.apply(check_row, axis=1)
有时,进入此管道的数据不满足我们的假设,并且会生成异常(例如 C 列中的非字符串值)。我想捕捉这些异常并标记这些行。
目前我们将整个 check_row 函数包装在一个 try-except 块中,并将这些行记录为问题(有很多这样的分配)。但是,我们忘记了哪个实际分配失败了。除了将每个都包装在自己的 try-except 中之外,是否有更 Pythonic 的方法来捕获特定的分配?这感觉很难看:
def check_row(row):
try:
if row['C'] == 'foo':
row['B'] += row['A']
except Exception as e:
row['errors'] = f"Failed to assign to B: {repr(e)}"
try:
row['C'] = row['C'].zfill(5)
except Exception as e:
row['errors'] = f"Failed to assign to C: {repr(e)}"
#etc
return row
我想到了类似的东西:
def assign(column, value):
"""inside the scope of check_row"""
try:
row[column] = value
except Exception as e:
row['errors'] = f"Failed to assign to {column}: {repr(e)}"
但是当然它的价值计算失败了,而不是实际的分配,所以这并不能完全做到。
解决方案
推荐阅读
- java - bean 验证 jsr349 @Min.List ,这是如何工作的?
- reactjs - 如何从 Identity Server 获取 access_token 命中令牌端点,使用 fetch 从反应客户端传递凭据?
- testing - Groovy/Grails 字符串中“\”转义字符的扩散
- java - 如何设置“备份”字体
- google-analytics - 在每次 url 更改时跟踪单页应用程序的 GA 页面加载事件
- javascript - react native如何导入在线脚本
- css - Angular 6 Material - 色调和如何更改垫子单选按钮的颜色
- redux-saga - 我可以使用 return 在生成器函数中停止执行吗?
- sql-server - MS-SQL 以两列为轴
- ios - 上传成功后在 iTunes 连接中不可见