我會使用applymap
選項1
使用str.replace
只是與''
取代'-'
。我假設我們總是可以取最後10位數字。
df[cols_to_check].applymap(lambda x: x.replace('-', '')[-10:])
Phone phone Phone1
0 1234567890 1234567890 1234567890
1 1234567890 1234567890 1234567890
2 1234567890 1234567890 1234567890
選項2
使用re.sub
但是,如果你想去除所有非數字字符,請使用正則表達式模塊re
,做類似的東西在選項1
import re
df[cols_to_check].applymap(lambda x: re.sub(r'\D', '', x)[-10:])
Phone phone Phone1
0 1234567890 1234567890 1234567890
1 1234567890 1234567890 1234567890
2 1234567890 1234567890 1234567890
選項3
我們還可以使用pd.Series.str
字符串存取器。但是,我們需要首先將其融合成一個系列。
df[cols_to_check].stack().str.replace('\D', '').str[-10:].unstack()
Phone phone Phone1
0 1234567890 1234567890 1234567890
1 1234567890 1234567890 1234567890
2 1234567890 1234567890 1234567890
設置
df = pd.DataFrame(dict(
Phone=['1-123-456-7890', '123-4567890', '11234567890'],
phone=['1-123-456-7890', '123-4567890', '11234567890'],
Phone1=['1-123-456-7890', '123-4567890', '11234567890'],
Other=[1, 2, 3]
))
cols_to_check = ['Phone', 'phone', 'Phone1']
df
Other Phone Phone1 phone
0 1 1-123-456-7890 1-123-456-7890 1-123-456-7890
1 2 123-4567890 123-4567890 123-4567890
2 3 11234567890 11234567890 11234567890