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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:57:31