如何使用apply、map或applymap查询pandas DataFrame行列的数据类型
实现方案
pandas 默认的df.dtypes仅会返回列的顶层推断类型,不会识别列内混合的不同元素类型,你可以按以下需求用对应的方法实现:
逐元素查看实际数据类型
直接用applymap(pandas 2.1+ 推荐用map)逐元素调用类型检测:
# 返回类型对象 element_type_df = df.applymap(type) # 如需更易读的类型名文本,改成以下写法 element_type_df = df.applymap(lambda x: type(x).__name__)
统计每列包含的所有唯一数据类型
适合快速排查混合类型列的类型组成:
col_type_summary = element_type_df.apply(lambda col: col.unique().tolist(), axis=0)
执行后你可以直接看到对应列的所有类型,比如混合了list和str的列,返回结果为['list', 'str']。
统计每行包含的所有唯一数据类型
调整apply的axis参数即可按行统计:
row_type_summary = element_type_df.apply(lambda row: row.unique().tolist(), axis=1)
补充说明
- 若需要筛选指定类型的行/单元格,可以直接用
element_type_df做布尔索引,比如筛选col1列值为dict的所有行:df[element_type_df['col1'] == 'dict'] - 大体积DataFrame逐元素处理性能会稍慢,仅建议做数据探查时使用。
内容的提问来源于stack exchange,提问作者Akash Talole
相关产品推荐
相关产品推荐

