如何用Python统计DataFrame中txt列含中文的行数?
统计DataFrame中包含中文的行数解决方案
我来帮你搞定这个问题!你之前只检测“汉”字的方法确实有很大局限性——中文有几千个常用字,只盯一个字肯定会漏掉大量符合条件的行。另外你提到的langdetect报错,根源是列里可能存在非字符串类型的数据,先把类型统一转对就能解决啦。下面给你两种实用的解决方案:
方法一:用正则表达式快速匹配中文字符(推荐,高效适配大数据)
中文字符的Unicode范围是\u4e00-\u9fa5,我们可以借助pandas的str.contains直接匹配这个范围,一步到位统计行数,处理10000行数据速度超快:
import pandas as pd # 读取CSV文件到DataFrame df = pd.read_csv("annotation_sample.csv") # 先确保'txt'列是字符串类型,避免类型报错 df['txt'] = df['txt'].astype(str) # 统计包含至少一个中文字符的行数 chinese_row_count = df['txt'].str.contains('[\u4e00-\u9fa5]').sum() print(f"包含中文的行数:{chinese_row_count}")
这个方法的优势是速度快、准确率高,只要文本里存在任何中文字符都会被检测到,完美解决你之前只检测“汉”字的局限性问题。
方法二:修复langdetect的使用(适合需要判断文本语言的场景)
如果你确实想用langdetect来判断文本是否为中文,只需要先把列统一转成字符串,再处理检测时的异常情况(比如空文本、纯符号这类无法识别语言的内容):
from langdetect import detect, LangDetectException import pandas as pd df = pd.read_csv("annotation_sample.csv") # 统一转成字符串类型 df['txt'] = df['txt'].astype(str) def check_chinese(text): try: # 检测语言是否为中文(可根据需求添加繁体'zh-tw') return detect(text) == 'zh-cn' except LangDetectException: # 处理无法检测的情况,返回False return False # 应用函数并统计符合条件的行数 chinese_row_count = df['txt'].apply(check_chinese).sum() print(f"包含中文的行数:{chinese_row_count}")
不过要注意,langdetect对短文本的判断可能不够准确,而且处理速度比正则慢一些。如果你的需求只是判断文本中是否存在中文字符,方法一完全够用啦。
内容的提问来源于stack exchange,提问作者box
相关产品推荐
相关产品推荐

