将特定的整数行格式化为ssn样式

时间:2018-11-26 17:23:29

标签: python pandas

我想将特定的整数列格式化为ssn格式(xxx-xx-xxxx)。我看到openpyxl具有内置样式。我一直在使用熊猫,不确定是否可以使用这种特定格式。

我确实看到了-

df.iloc[:,:].str.replace(',', '')

但是我想用'-'替换','。

import pandas as pd 






df = pd.read_excel('C:/Python/Python37/Files/Original.xls')


df.drop(['StartDate', 'EndDate','EmployeeID'], axis = 1, inplace=True)


df.rename(columns={'CheckNumber': 'W/E Date', 'CheckBranch': 'Branch','DeductionAmount':'Amount'},inplace=True)


df = df[['Branch','Deduction','CheckDate','W/E Date','SSN','LastName','FirstName','Amount','Agency','CaseNumber']]


ssn = (df['SSN'] # the integer column
       .astype(str)       # cast integers to string
       .str.zfill(8)      # zero-padding
       .pipe(lambda s: s.str[:2] + '-' + s.str[2:4] + '-' + s.str[4:]))

writer = pd.ExcelWriter('C:/Python/Python37/Files/Deductions Report.xlsx')
df.to_excel(writer,'Sheet1')
writer.save()

2 个答案:

答案 0 :(得分:0)

您的问题有点令人困惑,请看是否有帮助:

如果您有一列 integers ,并且您想要创建一个由字符串组成的SSN(社会保险号)格式的新列。您可以尝试以下操作:

df['SSN'] = (df['SSN']     # the "integer" column
             .astype(int)  # the integer column
             .astype(str)  # cast integers to string
             .str.zfill(9) # zero-padding
             .pipe(lambda s: s.str[:3] + '-' + s.str[3:5] + '-' + s.str[5:]))

答案 1 :(得分:0)

设置

社会安全号码是九位数字,格式为:AAA-GG-SSSS

s = pd.Series([111223333, 222334444])

0    111223333
1    222334444
dtype: int64

选项1
使用zipnumpy.unravel_index

pd.Series([
    '{}-{}-{}'.format(*el)
    for el in zip(*np.unravel_index(s, (1000,100,10000)))
])

选项2
使用f-strings

pd.Series([f'{i[:3]}-{i[3:5]}-{i[5:]}' for i in s.astype(str)])

两种产品:

0    111-22-3333
1    222-33-4444
dtype: object