我有一個從 csv 創建的 python 資料框(df)。我想獲取包含“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(')', ''))
uj5u.com熱心網友回復:
用于filter選擇帶有“電話”的列(以不區分大小寫的方式使用(?i)phone正則運算式)并apply用于str.replace洗掉非數字,最后update是 DataFrame in place。
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)']})
uj5u.com熱心網友回復:
phone_format = df.loc[:, df.columns.str.contains('PHONE')]
for col in phone_format:
df[col] = df[col].str.replace(r"\D ", "", regex=True)
uj5u.com熱心網友回復:
從使用您的代碼作為最小作業示例的起點:
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/520937.html
上一篇:匹配模式并將以下行放入資料結構中
