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

pandas DataFrame筛选仅保留数值列功能异常问题求助

代码问题排查及修复

现存问题

你的代码存在2个核心错误:

  • 赋值逻辑错误:判断列是数值类型后,你是把列名字符串赋值给了新DataFrame固定叫column的列,每次循环都会覆盖该列,完全没有把原列的实际数值导入新DataFrame,也没有保留原列名。
  • 缺少返回值:函数执行结束后没有返回处理好的num_dataframe,外部调用时无法拿到过滤后的结果,你观察到的「非数值列全部保留」本质是你使用了原输入DataFrame而非函数处理后的结果。

补充边界注意:如果某列是object类型但内容都是可转成数值的字符串,is_numeric_dtype不会判定为数值列,如果你需要兼容这类场景要额外加转换逻辑。

修复后的函数实现

import pandas as pd
from pandas.api.types import is_numeric_dtype

def x_y_arrays(dataframe):
    num_dataframe = pd.DataFrame()
    for column in dataframe.columns:
        if is_numeric_dtype(dataframe[column]):
            # 直接把原列的数值赋值给新DataFrame的对应列,保留原列名
            num_dataframe[column] = dataframe[column]
    # 最后返回处理好的数值列DataFrame
    return num_dataframe

更简洁的原生写法

pandas自带直接筛选数值列的方法,不需要手动循环遍历,代码更高效简洁:

def x_y_arrays(dataframe):
    # 直接筛选所有数值类型的列,返回新DataFrame
    return dataframe.select_dtypes(include='number')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 02:54:03