使用np.where通过自创建函数向熊猫添加列

时间:2018-10-24 12:53:30

标签: python pandas numpy

我有一个熊猫数据框,其中有两列(“ no1”和“ no2”),一些值包含汉字,有些不包含汉字。

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

1 个答案:

答案 0 :(得分:2)

我会这样用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)