【问题标题】:pandas dataframe reassign row with 10-character phone number熊猫数据框分配行与 10 个字符的电话号码
【发布时间】:2018-09-18 06:50:51
【问题描述】:

我有一个 pandas 数据框 df_data,它有一个名为“number”的列,其中包含各种形式的电话号码。例如,电话号码可以是 234-567-8901、2345678901 甚至 (234)-567-8901 的形式。我正在尝试有效地将这一列中的每一行更改为只有数字的电话号码(即 2345678901)。但是,我的代码会这样做,因为几乎有 1M 行,所以代码会永远运行,并且在大多数情况下甚至都不会完成。有一个更好的方法吗?归根结底,我有兴趣获得一列仅包含区号的列。列中的某些值不存在且值为 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)

【问题讨论】:

    标签: python regex pandas


    【解决方案1】:

    也许你想多了,只是从该列中删除任何不是数字的东西?

    # 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
    

    【讨论】:

    • 是的,这部分我确实想多了。即使某些行是 nan 值,您是否有关于如何仅获取每行中的前 3 位数字的建议?说到熊猫,我想我想多了。
    猜你喜欢
    • 1970-01-01
    • 2018-07-12
    • 1970-01-01
    • 2015-06-25
    • 2013-07-08
    • 2021-11-15
    • 2019-02-12
    • 2017-09-09
    • 2022-10-18
    相关资源
    最近更新 更多