DataFrame结合正则实现if then else逻辑修复混乱通讯录数据问题
混乱通讯录字段错位修复方案
核心问题根因
你编写的np.where逻辑不生效,根本原因是:Pandas 中str.extract匹配失败返回的空值是NaN(缺失值类型),不是字符串'nan',你用== 'nan'做判断条件永远不会命中,所以替换逻辑无法执行。
修复方案
方案1:使用Pandas原生fillna方法(更简洁)
fillna是Pandas专门用来填充空值的方法,一行代码即可实现需求:
df['Name_tmp'] = df['Name_tmp'].fillna(df['Name'])
方案2:调整np.where的判断条件(保留原写法)
如果要继续用np.where,把判断条件换成专门的空值判断函数即可:
df['Name_tmp'] = np.where(pd.isna(df['Name_tmp']), df['Name'], df['Name_tmp'])
额外优化建议
你现有代码还有两处容易出错的地方,可以同步调整:
- 正则表达式没有转义括号:正则中
()是分组符,要匹配文本里的括号需要加转义符\,修正后的正则参考:- 提取括号前的名称:
r'([^\(]+)\(.*' - 提取括号内的公司内容:
r'.*\(([^\)]+)\).*'
- 提取括号前的名称:
- 多字段拼接前先把空值替换为空字符串,避免拼接结果出现
nan字符串:
cols_to_merge = ['Name', 'SecondName', 'Surname', 'Company'] df['Nameall_tmp'] = df[cols_to_merge].fillna('').agg(' '.join, axis=1).str.strip()
内容的提问来源于stack exchange,提问作者Simon
相关产品推荐
相关产品推荐

