如何在Pandas数据库中找到英汉组合记录

2024-09-29 17:49:55 发布

您现在位置:Python中文网/ 问答频道 /正文

在pandas中,数据框有两列,如“FirstName”和“LastName”。从该列中,“名字”列可以是英文或中文组合,而“姓氏”列可以是中文或英文组合。所以,我想在数据框中显示那些英汉组合的记录。你知道吗

 code snippet:

      df.loc[df['FirstName'].str.contains(r'[a-zA-Z]+') & df['FirstName'].str.contains(r'[一种-ž]+'))]

我不知道这个代码片段是否有效。你知道吗

我的输入数据帧是:

         FirstName          LastName

        jocovich            nadhal
        smith               pointing
        西德哈斯             supreet
        yuvi                雷迪
        bsreddy             rakshita
        sreeja              巴尔加维
        雷迪                西德哈斯
        Cédric             LEMARCHAND
        Radosław           Piotrowski  

上面是我的数据框。但我需要的输出如下:

        FirstName          LastName

         西德哈斯             supreet
         yuvi                雷迪
         sreeja              巴尔加维

我想显示数据框中的中英文记录。你知道吗


Tags: 数据pandasdf记录codefirstname名字snippet
2条回答

试试这个,逻辑就是检查字符串是否只能用ASCII字符编码。你知道吗

# -*- coding: utf-8 -*-
df = pd.DataFrame({"FirstName":["jocovich","smith"," 西德哈斯","yuvi"," bsreddy","sreeja"],"LastName":["nadhal","pointing","supreet","雷迪","rakshita","巴尔加维"],"blah":["example","example","example","example","example","example"]})


def isEnglish(s):
    o = list(s)
    ot = []
    for n in o:
        try:
            n.encode(encoding='utf-8').decode('ascii')
        except UnicodeDecodeError:
            ot.append(False)
        else:
            ot.append(True)

    if ot==[True,False] or ot == [False,True]:
        return True
    else:
        return False


output = df[df[["FirstName","LastName"]].apply(lambda x: isEnglish(x),axis=1)]

输出

  FirstName LastName     blah
2      西德哈斯  supreet  example
3      yuvi       雷迪  example
5    sreeja     巴尔加维  example

你可以像我一样搜索unicodes。也可以反转匹配:

df.query("FirstName.str.contains(r'[\u4e00-\u9FFF]', regex=True) or LastName.str.contains(r'[\u4e00-\u9FFF]', regex=True)") 

or 

df[(df['FirstName'].str.contains(r'[\u4e00-\u9FFF]', regex=True)) | ( df['LastName'].str.contains(r'[\u4e00-\u9FFF]', regex=True))]

或者不匹配中文名字和姓氏:

df[((df['FirstName'].str.contains(r'[\u4e00-\u9FFF]', regex=True)) | ( df['LastName'].str.contains(r'[\u4e00-\u9FFF]', regex=True))) & (~df['FirstName'].str.contains(r'[\u4e00-\u9FFF]', regex=True) | (~df['LastName'].str.contains(r'[\u4e00-\u9FFF]', regex=True)))] 

输出:

  FirstName LastName
2      西德哈斯  supreet
3      yuvi       雷迪
5    sreeja     巴尔加维

相关问题 更多 >

    热门问题