如何在DataFrame中筛选float32与float64类型的全部列?
筛选DataFrame中的float32和float64列
你之前的方法无效,核心原因是np.dtype('float')本质对应float64,所以你的判断只能排除单一种浮点类型,另一种float32会被错误保留。要同时匹配这两种浮点类型,这里有两种简洁可靠的解决方案:
方法1:使用select_dtypes(最推荐)
Pandas的select_dtypes方法可以直接指定要包含的类型,np.floating是所有浮点类型的父类,它会自动匹配float32和float64:
import numpy as np import pandas as pd # 筛选出所有浮点类型的列名 float_columns = df_.select_dtypes(include=[np.floating]).columns # 如果需要直接获取对应的子DataFrame float_df = df_.select_dtypes(include=[np.floating])
方法2:手动指定类型集合匹配
如果你想明确限定只匹配float32和float64,可以创建一个类型元组,遍历列的dtype进行判断:
target_float_types = (np.float32, np.float64) float_columns = [col for col, dtype in df_.dtypes.items() if dtype in target_float_types] # 生成对应的子DataFrame float_df = df_[float_columns]
为什么你之前的方法不生效?
举个实际场景:假设你的DataFrame同时有float32和float64列,当你执行df_.dtypes.values != np.dtype('float')时:
float64的dtype等于np.dtype('float'),会被标记为Falsefloat32的dtype不等于np.dtype('float'),会被标记为True
这就导致你得到的categorical数组里,float32列被错误归类为非浮点列,完全不符合你的需求。
测试验证示例
我们可以用一个测试DataFrame验证效果:
df_ = pd.DataFrame({ 'float32_col': np.array([1.1, 2.2], dtype=np.float32), 'float64_col': np.array([3.3, 4.4], dtype=np.float64), 'int_col': [5, 6], 'str_col': ['a', 'b'] }) # 方法1输出结果 print(df_.select_dtypes(include=[np.floating]).columns) # 输出:Index(['float32_col', 'float64_col'], dtype='object') # 方法2输出结果 print([col for col, dtype in df_.dtypes.items() if dtype in (np.float32, np.float64)]) # 输出:['float32_col', 'float64_col']
内容的提问来源于stack exchange,提问作者yogz123
相关产品推荐
相关产品推荐

