首页 > 解决方案 > 使用 np.where 使用自创函数向 pandas 添加列

问题描述

我有一个带有两列('no1' & 'no2')的 pandas 数据框,其中一些值包含汉字,有些则不包含。

no1                     no2
Paul Pogba              贝克汉姆
Gianluigi Buffon        莱奥内尔・梅西
莱奥内尔・梅西           莱奥内尔・梅西
Cristiano Ronaldo       莱奥内尔・梅西
STEVE HARRIS            zinedine zidane
Cristiano Ronaldo       Gianluigi Buffon

如果两列中的任何一列中有一个带有中文字符的字符串,我想添加一个值为 1 的列,如果两者都没有,我想添加一个值为 0 的列。该函数如下所示:

def find_china_symbols(text):
    counter = 0
    if isinstance(text,str):
        for char in text:
            if ord(char) > 10000:
                counter += 1
        if counter > 0:
            return True
        else:
            return False
    else:
        return False

以前我曾经np.where创建过这个列(如下所示),但在这种情况下它不起作用。为什么不呢?

df["Chinese"] = np.where(find_china_symbols(df["no1"]) | find_china_symbols(df["no2"]),1,0)

理想情况下,这将是结果:

no1                     no2                  Chinese
Paul Pogba              贝克汉姆              1
Gianluigi Buffon        莱奥内尔・梅西         1
莱奥内尔・梅西           莱奥内尔・梅西         1
Cristiano Ronaldo       莱奥内尔・梅西         1
STEVE HARRIS            zinedine zidane       0
Cristiano Ronaldo       Gianluigi Buffon      0

标签: pythonpandasnumpy

解决方案


我会这样处理applymap

def find_china_symbols(text):
  return any(map(lambda char: ord(char) > 1000, text))

df['Chinese'] = df.applymap(find_china_symbols).any(1).astype(int)

推荐阅读