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

如何统计DataFrame各列数值、空白、NaN及文本值并按条件筛选

Pandas 实现DataFrame列类型统计与筛选(对应Excel ISNUMBER/ISTEXT功能)

先构造你提供的示例数据:

import pandas as pd
import numpy as np

data = {
    'Col1': [10.5, '', 2.9, '#VAL', 3],
    'Col2': [2.5, 's', 3.2, np.nan, 5.6],
    'Col3': [np.nan, '', 'a', 2, 4]
}
df = pd.DataFrame(data)

一、生成类型统计汇总表

我们可以通过逐列判定单元格类型,统计各类数量后组合成目标汇总表,对应Excel中ISNUMBER、ISTEXT、COUNTBLANK等函数的逻辑。

1. 明确类型判定规则

  • NaN: 用pd.isna()识别缺失值
  • Blank: 空字符串'',需排除NaN(pd.isna('')返回False)
  • Integer/Float: 可转换为数值的单元格(含原生数值类型、可转数值的字符串)
  • Text: 不属于上述三类的单元格(如#VAL、s这类无法转数值的字符串)

2. 统计代码实现

# 初始化统计结果字典
summary = {
    'Integer/Float': [],
    'Blank': [],
    'Nan': [],
    'Text': []
}

for col in df.columns:
    # 统计NaN数量
    nan_count = df[col].isna().sum()
    # 统计Blank数量
    blank_count = (df[col] == '').sum()
    # 统计可转为数值的单元格数量:先排除NaN和Blank,再尝试转换
    valid_cells = df[col][~df[col].isna() & (df[col] != '')]
    num_count = pd.to_numeric(valid_cells, errors='coerce').notna().sum()
    # 文本数量 = 总行数 - 其他三类数量
    text_count = len(df) - nan_count - blank_count - num_count
    
    # 存入统计结果
    summary['Integer/Float'].append(num_count)
    summary['Blank'].append(blank_count)
    summary['Nan'].append(nan_count)
    summary['Text'].append(text_count)

# 转换为目标格式的汇总DataFrame
summary_df = pd.DataFrame(summary, index=df.columns).T
print(summary_df)

运行后输出结果与你期望的汇总表完全一致:

Col1  Col2  Col3
Integer/Float      3     3     2
Blank              1     0     1
Nan                0     1     1
Text               1     1     1

二、按类型筛选单元格

1. 筛选文本值(以Col1为例)

text_col1 = df.loc[
    ~df['Col1'].isna() & 
    (df['Col1'] != '') & 
    pd.to_numeric(df['Col1'], errors='coerce').isna(),
    'Col1'
]
# 输出:3    #VAL
# Name: Col1, dtype: object

2. 筛选数值(Integer/Float,以Col3为例)

num_col3 = df.loc[
    pd.to_numeric(df['Col3'], errors='coerce').notna(),
    'Col3'
]
# 输出:3    2
# 4    4
# Name: Col3, dtype: object

3. 筛选Blank或NaN(以Col2为例)

blank_nan_col2 = df.loc[df['Col2'].isna() | (df['Col2'] == ''), 'Col2']
# 输出:3   NaN
# Name: Col2, dtype: object

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 17:50:36