python - 基于正则表达式将列值替换为另一个列值 - Python
问题描述
这是我的 DataFrame 的摘录
data = [
['Citroën Amillis', '20 Za Des Baliveaux - 77120 Amillis', '77120', 'ok'],
['Relat Paris 9e', 'Métro Opéra - 75009 Paris 9e', 'Paris', 'error'],
['Macif Avon', '49 Av Franklin Roosevelt - 77210 Avon', '77210', 'ok'],
['Atac La Chapelle-la-Reine', 'Za Rue De L\'avenir - 77760 La Chapelle-la-Reine', 'La', 'error'],
['Société Générale La Ferté-Gaucher', '42 Rue De Paris - 77320 La Ferté-Gaucher', 'La', 'error']
]
df = pd.DataFrame(data, columns=['nom_magasin', 'adresse', 'code_postal', 'is_code_postal'])
df
如您所见,我的数据框中存在错误。对于某些地址,特别是当城市名称组成时(例如:“La Chapelle-la-Reine”),“code_postal”列是错误的。
我要做的是以下内容:如果“is_code_postal”列是“错误”,请将“code_postal”替换为“adresse”列中出现的邮政编码的正则表达式。
我找不到解决方案。要做到这一点,我已经尝试过了df['is_code_postal'] = np.where(df.code_postal.str.match('^[a-zA-z]'), 'error', 'ok')
。起初我正在考虑在同一个函数中进行所有更改。但我错过了一些东西。
重要的是我的数据框有点重(超过 250K 行),所以我想寻求一个有效的解决方案。
你们有什么想法吗?
解决方案
您可以忽略 code_postal 并使用 Quang 的代码直接从“地址”中提取它:
df['code_postal']=df['adresse'].str.extract('(\d{5})')
推荐阅读
- apache-spark - Spark在选择子实体时返回一个空值数组
- python - Python 舍入日期
- php - 在代码末尾解析错误?看了好几遍都没找到
- php - 如果他们在 Laravel 中根本不使用该模块,如何发送邮件
- ios - 如何在运行时快速向类添加方法
- gitahead - 在 GitAhead 的历史窗格中同时显示日期和时间
- javascript - 使用 jquery-ui 的可排序小部件更新排序顺序值
- haskell - 在 GHC.Prim 中,为什么指针操作会因未经检查的异常而失败?
- machine-learning - 机器学习中的损失函数图从何而来?
- reactjs - 如何从子组件更改步骤?