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

Pandas转置DataFrame后使用select_dtypes返回空的原因?

问题原因解析

你的问题核心在于转置后DataFrame的列类型发生了本质变化,具体细节如下:

  1. 原DataFrame的列类型:

    • 列A、B的元素都是整数,类型为int64(标准数值型)
    • 列C因为混入了字符串'a',整列被判定为object类型(混合类型容器)
  2. 转置后的类型变化:
    转置后原DataFrame的行变成列,每一列的元素来自原DataFrame的不同列。比如转置后的列I包含:原列A的20(int64)、原列B的222(int64)、原列C的3(属于object列的元素,即使数值本身是整数,存储类型仍为object)。
    由于同一列内存在object类型的元素,pandas会将整列类型统一设为object——转置后的所有列都会变成object类型。

  3. 为什么select_dtypes('number')返回空:
    这个方法的作用是筛选出数值类型的列,而转置后没有任何一列是数值类型,自然返回空结果。

正确实现需求的方法

如果你想删除原DataFrame中包含非数值的行,不需要转置,直接用apply结合pd.to_numeric判断每行是否全为数值即可:

import pandas as pd

data = pd.DataFrame({'A':[20,111],'B':[222,200],'C':[3,'a']}, index = ['I','II'])

# 筛选所有元素都能转为数值的行
filtered_data = data[data.apply(lambda row: pd.to_numeric(row, errors='coerce').notna().all(), axis=1)]
print(filtered_data)

执行结果会保留行I,自动剔除包含非数值'a'的行II。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 10:35:05