如何从电话号码中删除“”并从字符串列表中选择电话号码?

2024-04-29 16:54:51 发布

您现在位置:Python中文网/ 问答频道 /正文

这可能很容易,但我对python还是新手。谁能帮帮我吗

以下是数据:

data = {'contact': ['123-546-3454', 'Sarah', 'Cyrus', '2458703433', '789-862-4860', 'Juan']}
df = pd.DataFrame(data = data)
df

Out[1]:
    contact
0   123-546-3454
1   Sarah
2   Cyrus
3   2458703433
4   789-862-4860
5   Juan

我想从电话号码中删除“-”,并通过分隔电话号码和姓名获得两个数据帧。 预期结果:

Out[2]:
    contact
0   Sarah
1   Cyrus
2   Juan

Out[3]:
    contact
0   11235463454
1   2458703433
2   7898624860


Tags: 数据dataframedfdatacontact电话号码outpd
3条回答

Pandas系列有.str,它有函数.split()分割字符串和.join()加入列表。您可以先使用.split('-')拆分联系人,然后使用.join('')将其加入

要获取联系人和姓名的单独数据帧,请为联系人所在的行创建一个True掩码.str.contains(pattern)是一个检查regexpattern是否以字符串形式存在的函数。为了匹配联系人,我们可以检查行是否只包含数字,为了只匹配行中的数字,模式是:^[0-9]+$

创建掩码后,使用df[mask]df[~mask]获取数据帧

使用:

df['contact'] = df.contact.str.split("-").str.join('')
mask = df.contact.str.contains("^[0-9]+$")
df_contact = df[mask]
df_name = df[~mask]

输出:

>>> df_contact
      contact
0  1235463454
3  2458703433
4  7898624860


>>> df_name
  contact
1   Sarah
2   Cyrus
5    Juan

您还可以使用replace()方法:

df['contact']=df['contact'].replace('-','',regex=True)

最后创建一个布尔掩码,并使用isnumeric()方法和chain reset_index()方法:

mask=df['contact'].str.isnumeric()

contactdf=df[mask].reset_index(drop=True)
namedf=df[~mask].reset_index(drop=True)

输出:

>>>contactdf

    contact
0   1235463454
1   2458703433
2   7898624860

>>>namedf
    contact
0   Sarah
1   Cyrus
2   Juan

尝试使用^{}+^{}创建一个掩码

df['contact'] = df.contact.str.replace('-', '')

mask = df.contact.str.isdigit() # boolean mask

df[mask], df[~mask]

相关问题 更多 >