如何排除pandas DataFrame中的datetime与object类型列?
解决方案:筛选DataFrame中非object和datetime类型的列
最简洁高效的方法:使用select_dtypes
Pandas内置的select_dtypes方法专门用来按数据类型筛选列,直接指定要排除的类型即可,不用手动循环:
# 排除object和datetime类型,保留其他列 filtered_df = df.select_dtypes(exclude=['object', 'datetime64']) print(filtered_df)
运行后会得到只包含EmployeeID(int64)和Age(float64)的DataFrame,完全符合需求。
你原来代码的问题
你的循环逻辑有两个关键错误:
- dtype比较方式错误:
np.datetime64是一个类型对象,而df[colName].dtypes是具体的dtype实例(比如datetime64[ns]),直接用!=比较永远返回True,导致datetime列没被排除。 - 判断object类型的方式不够严谨:虽然用
df[colName].dtypes != 'object'能工作,但更可靠的是用类型对象或检查dtype的属性。
修改后的循环代码
如果坚持要用循环实现,修正后的代码如下:
import numpy as np lst = list(df.columns) for col_name in lst: dtype = df[col_name].dtypes # 排除object和datetime类型 if not (np.issubdtype(dtype, np.object_) or np.issubdtype(dtype, np.datetime64)): print(df[col_name])
这里用np.issubdtype来检查列的dtype是否属于目标类型家族,能正确识别datetime64[ns]这类具体的datetime子类。
内容的提问来源于stack exchange,提问作者Shital
相关产品推荐
相关产品推荐

