如何使用pandas统计DataFrame列中每行逗号分隔的字符串数量
问题原因
- 第一种方法错误点:提前执行
astype('str')将原生NaN空值强制转换为字符串'nan',拆分后得到长度为1的列表,导致空值统计结果错误。 - 第二种方法错误点:未提前统一转换非空值为字符串类型,若列中存在数值类型的单条编码(如int类型的
23),调用str.count会返回NaN,最终被fillna(0)填充为0,导致单条条目统计错误。
可行解决方案
方案1:向量化操作(适配2200行及更大数据量,性能更好)
# 非空值转字符串拆分统计长度,原生空值直接填0 df['count'] = df['pre_code'].astype(str).str.split(',').str.len().where(df['pre_code'].notna(), 0)
方案2:apply实现(代码可读性更高,小数据量使用更便捷)
import pandas as pd df['count'] = df['pre_code'].apply(lambda x: len(str(x).split(',')) if pd.notna(x) else 0)
两种方案均可输出期望结果:
| no | pre_code | count |
|---|---|---|
| 1 | 23, 234, 345 | 3 |
| 2 | 234, 345 | 2 |
| 3 | 23 | 1 |
| 4 | NaN | 0 |
内容的提问来源于stack exchange,提问作者yangyang
相关产品推荐
相关产品推荐

