python - 使用 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
解决方案
我会这样处理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)
推荐阅读
- rest - 创建新对象时外键为空
- matlab - 每次运行都会累积函数评估的数量
- angular - 如何使用离子存储在 sqlite db 中保存离子 4 问题数据?
- sql - 如何仅提取具有三个或更多交易的客户名称?
- css - 在 laravel 中覆盖 Bootstrap 主题
- node.js - 是否可以在 docker 容器中使用 npm serialPort?
- excel - 将代码从 Excel 2011 更新到 Excel 2019
- javascript - 如何重构函数中的早期返回?
- python - 两个多行字符串的水平连接
- java - 无法将 JSON 数据发送到 Rest API 以获取 POST 请求