如何用Pandas统计每列中字符串与整数的数量?
在Pandas中统计列内整数与字符串数量的高效方法
嗨,你提到的需求完全可以用Pandas的内置方法高效实现,不用自己写低效的逐元素循环~ 下面分两种常见场景给你具体方案:
场景1:列中是混合数据类型(同时存int和str对象)
如果你的DataFrame列里直接混合了整数和字符串类型(比如有的元素是1,有的是'a'),可以用apply结合类型判断来统计,Pandas的内部优化会比手动写for循环快很多:
首先创建示例数据:
import pandas as pd df = pd.DataFrame({ 'mixed_col': [1, 'apple', 2, 'banana', 3, 'cherry'], 'another_col': ['x', 5, 'y', 6, 'z', 7] })
统计每列的整数、字符串数量:
# 对每列应用统计逻辑 count_result = df.apply(lambda col: pd.Series({ '整数数量': col.apply(lambda x: isinstance(x, int)).sum(), '字符串数量': col.apply(lambda x: isinstance(x, str)).sum() })) print(count_result)
输出会是:
mixed_col another_col 整数数量 3 3 字符串数量 3 3
场景2:列中都是字符串,但部分可转为整数(比如'123'和'abc')
如果列的类型是字符串,但你想统计其中格式为整数的字符串数量(比如'456'算,'abc'不算),可以用自定义判断函数结合apply:
# 定义判断字符串是否为整数的函数 def is_integer_str(s): try: int(s) return True except ValueError: return False # 统计单列 int_str_count = df['string_col'].apply(is_integer_str).sum() str_count = len(df['string_col']) - int_str_count print(f"可转整数的字符串数量:{int_str_count}") print(f"普通字符串数量:{str_count}")
如果要批量处理所有字符串列,可以用:
str_cols = df.select_dtypes(include=['object']).columns count_result = df[str_cols].apply(lambda col: pd.Series({ '可转整数的字符串数': col.apply(is_integer_str).sum(), '普通字符串数': len(col) - col.apply(is_integer_str).sum() }))
为什么不用手动逐元素循环?
Pandas的apply、矢量化方法都是基于NumPy的底层C实现,比Python层面的for循环效率高几个数量级——尤其是数据量较大时,这种差异会非常明显。如果还有特殊场景(比如需要处理负数、带小数点的整数等),可以调整判断逻辑来适配~
内容的提问来源于stack exchange,提问作者AntonioAgAl
相关产品推荐
相关产品推荐

