带有10个字符的电话号码的熊猫数据框重新分配行

时间:2018-09-18 06:50:52

标签: python regex pandas

我有一个熊猫数据框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)

1 个答案:

答案 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