本文详解如何在 Pandas 中判断 DataFrame 是否为空,并在行级处理(如 apply 或迭代)中避免对空数据执行无效操作,重点推荐 iterrows() + 空值前置校验的稳健方案。 本文详解如何在 pandas 中判断 dataframe 是否为空,并在行级处理(如 `apply` 或迭代)中避免对空数据执行无效操作,重点推荐 `iterrows()` + 空值前置校验的稳健方案。在实际数据处理中,我们常需对 DataFrame 的每一行执行特定操作(例如发送邮件、调用 API、写入数据库),但必须确保仅当 DataFrame 非空时才启动该流程------否则可能引发冗余日志、空指针异常或意外副作用。值得注意的是:df.apply(func, axis=1) 本身无法跳过"空 DataFrame",因为当 df.empty == True 时,apply 根本不会调用函数(返回空 Series/DataFrame),但若误将空校验逻辑嵌入函数内部(如问题中的 Scenario 2),不仅多余,还易造成误解和维护陷阱。因此,正确的实践是:将空检查置于行级处理逻辑之外,作为顶层守卫;再选用语义清晰、控制明确的迭代方式处理有效行。? 推荐方案:iterrows() + 外层空校验(简洁、安全、可读性强)import pandas as pddf = pd.DataFrame({ 'Datetime': '2020/01/30 14:00:00', '2020/01/30 14:00:00', 'Item': 'Apple', 'Apple', 'Cost': '1', '1'})df = df.drop_duplicates(keep=False) # 可能产生空 DataFrame# ? 正确:外层判断,仅当有数据时才迭代if not df.empty: for idx, row in df.iterrows(): # 每行独立处理:例如发送邮件 print(f"→ 发送第 {idx} 行数据:") print(f" 时间: {row'Datetime'}") print(f" 商品: {row'Item'}") print(f" 成本: {row'Cost'}") # send_email(to="admin@example.com", subject=row'Item', body=str(row))else: print("?? DataFrame 为空,跳过所有行级操作。")? 为什么不用 df.apply(func, axis=1)? JoinMC智能客服 JoinMC智能客服,帮您熬夜加班,7X24小时全天候智能回复用户消息,自动维护媒体主页,全平台渠道集成管理,电商物流平台一键绑定,让您出海轻松无忧!
相关推荐
han_hanker8 分钟前
sql语法 DECODE, CASE ... WHENZHOU_WUYI12 分钟前
4. light wam 模型loss计算过程井川廊咏17 分钟前
vi 删除指定范围的行,不用再反复按 ddnwsuaf_huasir21 分钟前
【无标题】长不胖的路人甲1 小时前
Serial 串行、Parallel 并行、CMS 并发收集器z落落1 小时前
StudentInfo表 分页、增删改 存储过程+C# WinForm 存储过程实现分页和增删改查影寂ldy1 小时前
WinForm 数据库【新增+编辑】完整功能(参数化查询+配置文件+防报错全套)迷枫7122 小时前
达梦数据库 Hint 使用与 Hint 注入实战Python私教2 小时前
Codex 写出的代码能跑却算错钱:我用 3 个测试拆穿一次 AI 编程幻觉Python私教2 小时前
我只写了一个 add 工具,终于把 MCP 的 Host、Client、Server 跑明白了