Python实现DataFrame列数据拉丁/非拉丁分类及代码问题排查
解决DataFrame列的拉丁/非拉丁字符分类问题
我来帮你排查代码里的问题,顺便实现遍历所有列输出分类结果的功能~
原代码的问题分析
你的代码之所以始终返回「Latin」,主要有两个核心问题:
- 正则表达式写法错误:Python的正则不识别
U+0000-U+007F这种格式,正确的ASCII范围(拉丁字符核心范围)写法应该是\x00-\x7F。原代码里的表达式其实是在匹配U、+、0-7、F这些单个字符,几乎所有文本列都会包含这些字符,所以永远返回Latin。 - 逻辑完全搞反:你原本想判断是否存在非拉丁字符,但原代码的逻辑是「只要列里有一个ASCII字符就返回Latin」——这显然不符合需求,我们需要的是「如果列里存在非ASCII字符,就标记为Non-Latin,否则为Latin」。
修正后的完整实现
首先定义一个判断列是否为拉丁字符的辅助函数,然后遍历DataFrame的所有列输出结果:
import pandas as pd def is_latin_column(col_series): # 将列转换为字符串,检查是否存在非ASCII(非拉丁)字符 # [^\x00-\x7F] 匹配所有不在ASCII范围内的字符 has_non_latin = col_series.astype(str).str.contains(r'[^\x00-\x7F]').any() # 如果没有非拉丁字符返回True(Latin),否则返回False(Non-Latin) return not has_non_latin # 遍历所有列并输出分类结果 for col_name in dataset.columns: classification = "Latin" if is_latin_column(dataset[col_name]) else "Non-Latin" print(f"{col_name}: {classification}")
测试示例
假设你的数据集是这样的:
data = { 'name': ['张三', 'Alice', 'Bob'], 'company': ['Tech Corp', 'ABC Ltd', 'XYZ Inc'], 'address': ['北京市朝阳区', '123 Main St', '456 Oak Ave'], 'ssn': ['123-45-6789', '987-65-4321', '111-22-3333'], 'creditcardnumber': ['4111-1111-1111-1111', '5555-5555-5555-4444', '6011-1111-1111-1111'] } dataset = pd.DataFrame(data)
运行代码后会得到如下输出:
name: Non-Latin company: Latin address: Non-Latin ssn: Latin creditcardnumber: Latin
内容的提问来源于stack exchange,提问作者Proton
相关产品推荐
相关产品推荐

