如何将Pandas DataFrame目标行列表前两位替换为0,剩余位替换为图像宽高
解决方案
前置准备
先导入需要的依赖库,你提到的nan一般是numpy定义的空值类型,所以需要同步导入numpy:
import pandas as pd import numpy as np
核心实现逻辑
用pandas基础的apply逐行处理即可,逻辑直观容易理解,完全适配你的需求:
- 先判断当前行是否符合处理条件:
class列的列表元素均为No finding - 符合条件的行直接生成新的BB列嵌套列表,每个子列表统一替换为
[0, 0, 当前行宽度w, 当前行高度h],子列表数量和原BB列保持一致
完整可运行代码
# 定义单行处理函数 def update_bb(row): # 可根据实际需求调整判断条件,如果只要存在'No finding'就处理,改为if 'No finding' in row['class']即可 if all(item == 'No finding' for item in row['class']): # 生成和原BB子列表数量相同的新坐标列表 row['BB'] = [[0, 0, row['w'], row['h']] for _ in row['BB']] return row # 对整个DataFrame逐行应用处理逻辑 df = df.apply(update_bb, axis=1)
说明
这个方案没有直接修改原列表中的nan值,而是直接生成符合要求的新列表,避免了因为nan类型(比如是Python原生None还是numpy.nan)导致的适配问题,处理后的BB列输出和你给出的预期效果完全一致。
内容的提问来源于stack exchange,提问作者Engr Ali
相关产品推荐
相关产品推荐

