python - 如果数据框中的列为空,如何创建条件子句?
问题描述
我有一个看起来像这样的df:
fname lname
joe smith
john smith
jane@jane.com
jacky /jax jack
a@a.com non
john (jack) smith
Bob J. Smith
我想创建一个逻辑,说如果lname
是空的,如果有两个OR
三个字符串fname
分开第二个字符串OR
第三个字符串并将其推入lname
列。如果电子邮件地址保持fname
原样,并且fname
列中有斜杠或括号,并且保持原样没有值lname
。
新的df:
fname lname
joe smith
john smith
jane@jane.com
jacky /jax jack
a@a.com non
john (jack) smith
Bob J. smith
到目前为止分隔两个字符串的代码:
df[['lname']] = df['name'].loc[df['fname'].str.split().str.len() == 2].str.split(expand=True)
解决方案
使用以下示例数据框:
df = pd.DataFrame({'fname': ['joe', 'john smith', 'jane@jane.com', 'jacky /jax', 'a@a.com', 'john (jack)', 'Bob J. Smith'],
'lname': ['smith', '', '', 'jack', 'non', 'smith', '']})
您可以使用np.where()
:
conditions = (df['lname']=='') & (df['fname'].str.split().str.len()>1)
df['lname'] = np.where(conditions, df['fname'].str.split().str[-1].str.lower(), df['lname'])
产量:
fname lname
0 joe smith
1 john smith smith
2 jane@jane.com
3 jacky /jax jack
4 a@a.com non
5 john (jack) smith
6 Bob J. Smith smith
要从填充fname
了其列的行的列中删除最后一个字符串:lname
df['fname'] = np.where(conditions, df['fname'].str.split().str[:-1].str.join(' '), df['fname'])
产量:
fname lname
0 joe smith
1 john smith
2 jane@jane.com
3 jacky /jax jack
4 a@a.com non
5 john (jack) smith
6 Bob J. smith
推荐阅读
- javascript - 使用 For 循环的 JSON 数组迭代在最后一个索引处停止
- exception - 为什么 length/2 让我退出全局堆栈?
- python - Python - ElementTree XML API(未按预期解析)
- sql-server - 如何修复阻止我复制表模式的约束?
- css - 4个简单的拨动开关!我究竟做错了什么?
- node.js - 在 cypress 中需要帮助以从 excel/csv 读取数据
- java - 如何在 Spring Boot 中验证类型“java.lang.Boolean”
- amazon-web-services - AWS GLUE 作业脚本按数据分组
- php - How To Redirect .htaccess domain, http to https. cant find what works for me in any thread
- excel - Excel VBA code to scrape URLs, two different error codes