python - 对于每个带有 'phone' 的 pandas 数据帧列,删除非数字

标签 python pandas dataframe csv

我有一个从 csv 创建的 python 数据框 (df)。我想获取包含“PHONE”(或“phone”或“Phone”)的每个列名称,并将其所有行更改为 5555555555 的格式。所以:

(555) 555-5555 将是 5555555555,

555-555-5555 将是 5555555555,

等等。

我尝试了以下操作,但出现语法错误。希望我至少有点接近:

phone_format = df.loc[:, df.columns.str.contains('PHONE')]
for col in phone_format:
    df['col'] = df.['col'].map(lambda x: x.replace('.', '').replace(' ', '').replace('-', '').replace('(', '').replace(')', ''))

最佳答案

使用filter选择包含“phone”的列(使用(?i)phone正则表达式以不区分大小写的方式)并applystr.replace 删除非数字,最后更新 DataFrame 就位

df.update(df.filter(regex='(?i)phone').apply(lambda s: s.str.replace(r'\D+', '', regex=True)))

示例:

# before
           pHoNe  other Phone  other col
0  (555) 55 5555  555-555-555    (55-55)

# after
       pHoNe  other Phone  other col
0  555555555    555555555    (55-55)

可重现的输入:

df = pd.DataFrame({'pHoNe': ['(555) 55 5555'], 'other Phone': ['555-555-555'], 'other col': ['(55-55)']})

关于python - 对于每个带有 'phone' 的 pandas 数据帧列,删除非数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74174606/

相关文章:

python - 根据最后一个值在数据框列中填充 NaN

python - Label Encoding() 与 One Hot Encoding() (sklearn,pandas) 建议

python - 从系列创建一个 pd.Dataframe

python - 列字典值到单独的 Dataframe

python - 如何创建和销毁wx.App?

python - 如何在 mpl_connect() 回调函数中显示错误消息

python - 有什么好的方法可以为 swig 接口(interface)生成文档吗?

python - 用python模拟滚动2个六面骰子的总和

python - 按列表中的值过滤 pandas DataFrame

r - 有没有什么方法可以使用 Shiny 的操作按钮递归地将行添加到 data.frame 中?