You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas按预设规则检查DataFrame指定列空值并打标签实现问题

问题原因

原代码的逻辑问题主要有3点:

  • 用df['City'].any()做判断是对整列取值做校验,而非逐行判断每行的City字段值
  • df['xxx'].empty是判断整列是否为空,不是判断单个单元格是否为空值
  • 用的if-elif-else分支是对整个DataFrame做全局判断,无法实现逐行打标签的需求

修改后完整代码

import pandas as pd

data = {
        'City': ['london', 'manchester', 'liverpool', 'birmingham'],
        'Address': ['A', 'B', 'C', 'D'],
        'Address1': ['E', 'F', '', 'H'],
        'Postcode': ['', '', 'L1 0AA', 'B23 3AW ']
        }

df = pd.DataFrame(data)

# 构造两种不符合要求的判断条件
# 情况1:City为london,且City/Address/Postcode任意字段为空
cond_london_fail = (df['City'] == 'london') & (df[['City', 'Address', 'Postcode']].eq('').any(axis=1))
# 情况2:City不为london,且四个字段任意为空
cond_other_fail = (df['City'] != 'london') & (df[['City', 'Address', 'Address1', 'Postcode']].eq('').any(axis=1))

# 新增Label列,满足失败条件的行赋值为'n',其余为空
df['Label'] = ''
df.loc[cond_london_fail | cond_other_fail, 'Label'] = 'n'

print(df)

运行输出

City Address Address1  Postcode Label
0      london       A        E              n
1  manchester       B        F              n
2   liverpool       C             L1 0AA     n
3  birmingham       D        H  B23 3AW       

和预期输出完全一致,若后续数据中存在NaN类型的空值,把判断条件里的.eq('')替换为.isna()即可适配。

内容的提问来源于stack exchange,提问作者user01

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 09:51:01