我有一个熊猫数据框df_data,它有一个名为“ number”的列,其中包含各种形式的电话号码。例如,电话号码可以采用234-567-8901、2345678901甚至(234)-567-8901的形式。我正在尝试有效地将此列中的每一行更改为仅包含数字的电话号码(即2345678901)。我的代码这样做了,但是,由于几乎有100万行,所以代码会永远运行,并且在大多数情况下甚至无法完成。有一个更好的方法吗?在一天结束时,我有兴趣获得仅包含区号的列。该列中的某些值不存在,并且具有nan值。任何帮助或指导,我们将不胜感激。
for i in range(np.shape(df_data)[0]):
j = df_data.loc[i,'number']
if(j==j):
df_data.loc[i,'number']= re.findall("\d{3}[-\.\s]??\d{3}[-\.\s]??\d{4}|\(\d{3}\)\s*\d{3}[-\.\s]??\d{4}|\d{3}[-\.\s]??\d{4}",j)
答案 0 :(得分:3)
也许您想得太多了,但是只需从该列中删除所有不是数字的内容?
# Setup
df = pd.DataFrame({'number' : ['234-567-8901', '(234)-567-8901', '2345678901']})
print(df)
number
0 234-567-8901
1 (234)-567-8901
2 2345678901
df['number'] = df.number.str.replace(r'\D+','')
print(df)
number
0 2345678901
1 2345678901
2 2345678901