Python: добавить 0 / ноль в строке внутри ячейки - PullRequest
0 голосов
/ 16 октября 2018

У меня есть этот пример данных в ячейке:

EmployeeID

2016-CT-1028
2016-CT-1028
2017-CT-1063
2017-CT-1063
2015-CT-948
2015-CT-948

Итак, моя проблема заключается в том, как я могу добавить 0 в эти данные 2015-CT-948, чтобы сделать так: 2015-CT-0948.Я попробовал этот код:

pattern = re.compile(r'(\d\d+)-(\w\w)-(\d\d\d)')
newlist = list(filter(pattern.match, idList))

Просто чтобы получить шаблон регулярного выражения, затем добавьте 0 с zfill(), но он не работает.Пожалуйста, кто-нибудь может дать мне представление о том, как я могу это сделать.В любом случае я могу сделать это в регулярных выражениях или в пандах.Спасибо!

Ответы [ 5 ]

0 голосов
/ 16 октября 2018

В пандах вы можете использовать str.replace

df['EmployeeID'] = df.EmployeeID.str.replace(r'-(\d{3})$', r'-0\1', regex=True)


# Output:

0    2016-CT-1028
1    2016-CT-1028
2    2017-CT-1063
3    2017-CT-1063
4    2015-CT-0948
5    2015-CT-0948
Name: EmployeeID, dtype: object
0 голосов
/ 16 октября 2018

Вот один вкладыш:

df['EmployeeID'].apply(lambda x: '-'.join(xi if i != 2 else '%04d' % int(xi) for i, xi in enumerate(x.split('-'))))
0 голосов
/ 16 октября 2018

С пандами это можно решить с помощью split вместо регулярного выражения:

df['EmployeeID'].apply(lambda x: '-'.join(x.split('-')[:-1] + [x.split('-')[-1].zfill(4)]))
0 голосов
/ 16 октября 2018

Если формат идентификатора строго определен, вы также можете использовать простое понимание списка, чтобы выполнить эту работу:

ids = [
'2017-CT-1063',
'2015-CT-948',
'2015-CT-948'
]

new_ids = [id if len(id) == 12 else id[0:8]+'0'+id[8:] for id in ids]
print(new_ids) 
# ['2017-CT-1063', '2015-CT-0948', '2015-CT-0948']
0 голосов
/ 16 октября 2018

Это один подход, использующий zfill

Пример:

import pandas as pd

def custZfill(val):
    val = val.split("-")
    #alternative split by last -
    #val = val.rsplit("-",1)
    val[-1] = val[-1].zfill(4)
    return "-".join(val)

df = pd.DataFrame({"EmployeeID": ["2016-CT-1028", "2016-CT-1028", 
                                  "2017-CT-1063", "2017-CT-1063", 
                                  "2015-CT-948", "2015-CT-948"]})
print(df["EmployeeID"].apply(custZfill))

Выход:

0    2016-CT-1028
1    2016-CT-1028
2    2017-CT-1063
3    2017-CT-1063
4    2015-CT-0948
5    2015-CT-0948
Name: EmployeeID, dtype: object
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...