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

Python Pandas如何修改函数使其根据列值返回两个DataFrame

Pandas自定义函数修改实现

直接通过布尔索引筛选目标行,按顺序返回两个拆分后的DataFrame即可,修改后的完整函数如下:

import pandas as pd

def my_func(df, col: str):
    # 生成目标列是否为NaN的布尔筛选条件
    is_nan = pd.isna(df[col])
    # 分别筛选两类数据
    df_nan = df[is_nan]
    df_not_nan = df[~is_nan]
    return df_nan, df_not_nan

细节说明

  • 原函数的逻辑问题是直接对整列df[col]调用pd.isna()做if判断,会返回一个长度和DataFrame行数一致的布尔序列,无法直接作为单值布尔条件使用,逐元素判断生成掩码后做行筛选才是Pandas的标准用法
  • 如果你需要拆分后的DataFrame行索引从0重新计数,可以在筛选后追加.reset_index(drop=True),例如写为df_nan = df[is_nan].reset_index(drop=True),输出效果会和你给出的样例完全匹配
  • 函数调用方式和预期完全一致,直接用两个变量按顺序接收返回值即可:
df_nan, df_not_nan = my_func(df=my_df, col="col1")

效果验证

用你提供的样例数据测试:

import numpy as np
# 构造测试样例
my_df = pd.DataFrame({"col1": [np.nan, "ABC", np.nan]})
df_nan, df_not_nan = my_func(my_df, col="col1")

未加索引重置时,df_nan输出为:

col1
0   NaN
2   NaN

df_not_nan输出为:

col1
1  ABC

加了reset_index(drop=True)后,两个结果的行索引都会重置为从0开始的连续序号,和你给出的预期样例完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 17:16:17