我有一个从 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
正则表达式以不区分大小写的方式)并apply
与 str.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/