csv 对于每个带有“电话”的Pandas Dataframe 列,删除非数字

nafvub8i  于 2022-12-06  发布在  其他
关注(0)|答案(3)|浏览(174)

我有一个从csv创建的python Dataframe (df)。我想获取包含“PHONE”(或“phone”或“Phone”)的每个列名,并将它们的所有行更改为555555555的格式。因此:
(555)555-5555之间的数字应该是555555555,
555-555-5555将是555555555,
和/或其他信息。
我尝试了下面的方法,但是得到了一个语法错误。希望我至少有点接近:

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(')', ''))
xpszyzbs

xpszyzbs1#

使用filter来选择带有“phone”的列(使用(?i)phone正则表达式时不区分大小写),使用applystr.replace来删除非数字列,最后使用update将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)']})
kgsdhlau

kgsdhlau2#

phone_format = df.loc[:, df.columns.str.contains('PHONE')]
for col in phone_format:    
    df[col] = df[col].str.replace(r"\D+", "", regex=True)
camsedfj

camsedfj3#

从使用您的代码作为最小工作示例的起点:

df = pd.DataFrame([['(555) 555-5555', '555-555-5555']], columns=['phone', 'Phone'])
phone_format = df.columns[df.columns.str.contains(pat='PHONE', case=False)]
for col in phone_format:
    df[col] = df[col].map(lambda x: x.replace('.', '').replace(' ', '').replace('-', '').replace('(', '').replace(')', ''))
df

相关问题