我正在尝试格式化来自 Faker API 的虚假数据。我正在使用 pandas 将其存储到数据框中。我已经弄清楚如何删除和替换任何错误,例如无间距、间距不正确、删除括号、国家/地区代码和扩展名。我遇到的主要问题是当数字像这样出现时:
xxxxxx-xxxx
而不是xxx-xxx-xxxx
。
这是我的代码:
from faker import Faker
import pandas as pd
fake = Faker()
name = []
address = []
number = []
ssn = []
for i in range(100):
name.append(fake.name())
address.append(fake.address().replace('\n', " "))
ssn.append(fake.ssn())
phone_number = fake.phone_number().split('x')[0].replace('.',"-").replace("(",'').replace(')','').replace(' ','')
# How do to deal with the opposite of ^
if phone_number.startswith('+1'):
phone_number = phone_number[2:]
if phone_number.startswith('1'):
phone_number = phone_number[1:]
if phone_number.startswith('001'):
phone_number = phone_number[3:]
phone_number = phone_number.lstrip('-')
if phone_number.isdigit() and len(phone_number) == 12: #10 or 12 work here for some reason, but I get diff. formats
phone_number = f"{phone_number[:3]}-{phone_number[3:6]}-{phone_number[6:]}"
else:
phone_number = phone_number
number.append(phone_number)
df = pd.DataFrame({'Name':name, 'Address':address,'Phone Number':number, 'SSN':ssn})
df
不太确定我的问题出在哪里。
我最初认为这是长度,或者它是否被读取为 int 而不是字符串,但是当我这样做时:
if phone_number.isdigit() and len(phone_number) == 12:
phone_number = f"{phone_number[:3]}-{phone_number[3:6]}-{phone_number[6:]}"
elif len(phone_number) != 12:
phone_number = f"{phone_number[:3]}-{phone_number[3:6]}{phone_number[6:]}"
else:
phone_number = phone_number
它的格式就像
xxx-xxxxxxx
。
如果我这样做:
if phone_number.isdigit() and len(phone_number) == 10:
phone_number = f"{phone_number[:3]}-{phone_number[3:6]}-{phone_number[6:]}"
elif len(phone_number) != 10:
phone_number = f"{phone_number[:3]}-{phone_number[3:6]}{phone_number[6:]}"
else:
phone_number = phone_number
然后数字的格式如下
xxx--xxx-xxxx
。
if phone_number.isdigit() and len(phone_number) == 10:
phone_number = f"{phone_number[:3]}-{phone_number[3:6]}-{phone_number[6:]}"
else:
phone_number = phone_number
如果我删除
elif
那么我会得到这个输出:'xxxxxx-xxxx'。
我几乎陷入困境,不知道该怎么办。
在此代码中:
if phone_number.startswith('+1'):
phone_number = phone_number[2:]
if phone_number.startswith('1'):
phone_number = phone_number[1:]
if phone_number.startswith('001'):
phone_number = phone_number[3:]
您将每个测试应用于
phone_number
之前分配的结果。因此,如果电话号码以 +11
开头,第一个 if
块将删除 +1
,然后第二个测试将成功并删除 1
。
您应该使用
elif
,这样您只测试原始数字,而不进行增量检查。
if phone_number.startswith('+1'):
phone_number = phone_number[2:]
elif phone_number.startswith('1'):
phone_number = phone_number[1:]
elif phone_number.startswith('001'):
phone_number = phone_number[3:]
另一种选择是使用正则表达式来删除以下任何前缀:
phone_number = re.sub(r'^(\+1|1|001)', '', phone_number)
我还没有查看你其余的代码,可能还有更多问题。