基于Pandas实现:Pixel Type列空白时新增Parent列
问题分析与修正方案
你的Python脚本存在两个核心问题:
- 缩进错误:Python对缩进语法要求严格,原代码中
if、else块及内部代码的缩进不符合规范,会直接触发语法错误。 - 逻辑错误:判断逻辑与需求颠倒,原代码仅在
Pixel Type非空时赋值Parent列,和你“空值行才填充Parent”的需求完全相反。
另外,iterrows()遍历行的效率较低,Pandas推荐用向量化操作处理这类批量数据任务,性能会更优。
修正后的向量化代码(符合需求)
import pandas as pd # 读取CSV文件为DataFrame df = pd.read_csv('your_file.csv') # 初始化Parent列为空字符串 df['Parent'] = '' # 批量赋值:当Pixel Type为空时,将对应行的Pixel Group / Pixel Name填入Parent列 df.loc[pd.isnull(df['Pixel Type']), 'Parent'] = df['Pixel Group / Pixel Name'] # 输出更新后的DataFrame print(df)
拓展:类似Excel向下填充的场景
如果你的实际需求是将上方最近一行Pixel Type非空的Group/Name值,填充到下方所有Pixel Type为空的行的Parent列(这是Excel中常见的分组填充逻辑),可以用以下代码:
import pandas as pd df = pd.read_csv('your_file.csv') # 提取Pixel Type非空行的Group/Name值,向下填充空值 df['Parent'] = df.loc[~pd.isnull(df['Pixel Type']), 'Pixel Group / Pixel Name'].ffill() # 可选:让Pixel Type非空的行保持Parent为空 df.loc[~pd.isnull(df['Pixel Type']), 'Parent'] = '' print(df)
原代码的语法修正版(保留遍历方式)
如果你坚持要用iterrows()遍历行,需要修正缩进和逻辑:
import pandas as pd df = pd.read_csv('your_file.csv') df['Parent'] = '' for index, row in df.iterrows(): pixel_type = row['Pixel Type'] # 当Pixel Type为空时,赋值当前行的Group/Name到Parent if pd.isnull(pixel_type): df.at[index, 'Parent'] = row['Pixel Group / Pixel Name'] # 非空行保持Parent为空,无需额外操作 print(df)
内容的提问来源于stack exchange,提问作者DarrenC
相关产品推荐
相关产品推荐

