使用np.where使用自建函数向pandas添加列

2024-10-04 09:20:32 发布

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

我有一个熊猫数据框,有两列('no1'&;'no2'),有些值包含汉字,有些不包含

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

我想添加一个值为1的列,如果这两列中的任何一列都有一个包含中文字符的字符串,则该列的值为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

Tags: textdfreturnifcounterfindsymbolschina
1条回答
网友
1楼 · 发布于 2024-10-04 09:20:32

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

相关问题 更多 >