代码之家  ›  专栏  ›  技术社区  ›  Archit

如何从熊猫的一列中筛选出第一个出现的汉字并将其放入另一列中

  •  1
  • Archit  · 技术社区  · 6 年前

    我有一个数据框 df :

    import pandas as pd
    df = pd.DataFrame({"ID": [1,2,3,4,5],
               "eng_mand" :["後山 4.7·3 reviews Community Center 竹杉園休閒農場",
                            "Taipei City 台北市Taiwan",
                            "綠山谷海芋園餐廳 3.8·52 reviews",
                            "名陽匍休閒農莊minyangpu大賞園",
                            "Menghuanhu"]})
    

    看起来像:

       ID                                   eng_mand
    0   1  後山 4.7·3 reviews Community Center 竹杉園休閒農場
    1   2                      Taipei City 台北市Taiwan
    2   3                    綠山谷海芋園餐廳 3.8·52 reviews
    3   4                        名陽匍休閒農莊minyangpu大賞園
    4   5                                 Menghuanhu
    

    我想从栏目中筛选出第一个出现的汉字 eng_mand 想把它放到另一个专栏里 mandarin_char 。我的最终输出必须如下所示:

       ID                                   eng_mand             mandarin_char          
    0   1  後山 4.7·3 reviews Community Center 竹杉園休閒農場        後山
    1   2                      Taipei City 台北市Taiwan             台北市
    2   3                    綠山谷海芋園餐廳 3.8·52 reviews         綠山谷海芋園餐廳
    3   4                        名陽匍休閒農莊minyangpu大賞園       名陽匍休閒農莊
    4   5                                 Menghuanhu
    

    在python-pandas中我如何做到这一点

    2 回复  |  直到 6 年前
        1
  •  1
  •   jezrael    6 年前

    使用 str.extract 全部的 chinese chars 加上 fillna 替换 NaN 如果需要,s将空字符串:

    df['mandarin_char'] = df['eng_mand'].str.extract(r'([\u4e00-\u9fff]+)').fillna('')
    print (df)
       ID                                   eng_mand mandarin_char
    0   1  後山 4.7·3 reviews Community Center 竹杉園休閒農場            後山
    1   2                      Taipei City 台北市Taiwan           台北市
    2   3                    綠山谷海芋園餐廳 3.8·52 reviews      綠山谷海芋園餐廳
    3   4                        名陽匍休閒農莊minyangpu大賞園       名陽匍休閒農莊
    4   5                                 Menghuanhu              
    
        2
  •  0
  •   EdChum Yuriy    6 年前

    使用 str.findall 把正则表达式传给 mandarin range :

    In[14]:
    df['mandarin_char'] = df['eng_mand'].str.findall('[\u4e00-\u9fff]+').str[0]
    df
    
    Out[14]: 
       ID                                   eng_mand mandarin_char
    0   1  後山 4.7·3 reviews Community Center 竹杉園休閒農場            後山
    1   2                      Taipei City 台北市Taiwan           台北市
    2   3                    綠山谷海芋園餐廳 3.8·52 reviews      綠山谷海芋園餐廳
    3   4                        名陽匍休閒農莊minyangpu大賞園       名陽匍休閒農莊
    4   5                                 Menghuanhu           NaN
    

    你可以打电话 fillna('') 关于替换的结果 NaN 如果需要。