У меня есть фрейм данных, который содержит столбец id
со следующими образцами значений
16620625 5686
16310427-5502
16501010 4957
16110430 8679
16990624/4174
16230404.1177
16820221/3388
Я хочу стандартизировать XXXXXXXX-XXXX (т.е. 8 и 4 цифры, разделенные тире). Как я могу добиться этого с помощью python.
вот мой код
df['id']
df.replace(" ", "-")
Можно использовать функцию DataFrame.replace(), используя регулярное выражение, подобное этому:
df = df.replace(regex=r'^(\d{8})\D(\d{4})$', value=r'\1-\2')
Вот пример кода с примерами данных.
import pandas as pd
df = pd.DataFrame({'id': [
'16620625 5686',
'16310427-5502',
'16501010 4957',
'16110430 8679',
'16990624/4174',
'16230404.1177',
'16820221/3388']})
# normalize matching strings with 8-digits + delimiter + 4-digits
df = df.replace(regex=r'^(\d{8})\D(\d{4})$', value=r'\1-\2')
print(df)
Выход:
id
0 16620625-5686
1 16310427-5502
2 16501010-4957
3 16110430-8679
4 16990624-4174
5 16230404-1177
6 16820221-3388
Если какое-либо значение не соответствует регулярному выражению ожидаемого формата, то его значение не будет изменено.
внутри цикла for:
Ваш ответ может быть улучшен с помощью дополнительной вспомогательной информации. Пожалуйста, редактировать добавьте дополнительную информацию, например цитаты или документацию, чтобы другие могли подтвердить правильность вашего ответа. Дополнительную информацию о том, как писать хорошие ответы, можно найти в справочном центре.
Если ваш «id» так структурирован, вы можете нарезать строку следующим образом:
df['ID2'] = df['ID'].str[:7] + '-' + df["ID"].str[9:]
Выход:
ID ID2
0 16620625 5686 1662062-5686
1 16310427-5502 1631042-5502
2 16501010 4957 1650101-4957
3 16110430 8679 1611043-8679
4 16990624/4174 1699062-4174
5 16230404.1177 1623040-1177
6 16820221/3388 1682022-3388
df['id'] = df['id'].str.replace(r"\D+", "-", regex=True)