Форматирование определенной строки целых чисел в стиле ssn - PullRequest
0 голосов
/ 26 ноября 2018

Я хочу отформатировать определенный столбец целых чисел в формат 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 голосов
/ 26 ноября 2018

Настройка

Номера социального страхования - это девятизначные числа, использующие форму: AAA-GG-SSSS

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

0    111223333
1    222334444
dtype: int64

Опция 1
Использование zip и numpy.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
0 голосов
/ 26 ноября 2018

Ваш вопрос немного сбивает с толку, посмотрите, поможет ли это:

Если у вас есть столбец целых чисел и вы хотите создать новый столбец, состоящий из строк в формате 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:]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...