Заполнение нулями до и после десятичной точки

Я использую питон 3.

У меня есть столбец десятичных чисел под названием «CIPCODE» в фрейме данных под названием «данные». Целая часть этого столбца находится в диапазоне от 1 до 60.

Я хочу отформатировать его так, чтобы:

первое условие: если значение целой части от 1 до 9 (включительно), то перед числом добавить ноль, например -

4.2021 становится 04.2021

25,3434 остается 25,3434

поэтому в основном у нас всегда должно быть 2 цифры перед десятичной запятой.

второе условие: после запятой всегда должно быть 4 цифры, например -

51.201 становится 51.2010

34,5555 остается 34,5555

Я пробовал следующее:

data['CIPCODE'] = data['CIPCODE'].astype(str).str.zfill(7)

но это только добавляет нули к части до десятичной точки.

Добро пожаловать в SO. Пожалуйста, старайтесь использовать правильные заглавные буквы, например. в начале вашего заголовка, предложения или слова «Я». Это было бы мягко по отношению к вашим читателям. Пожалуйста, прочитайте Как спросить и Минимально воспроизводимый пример. Затем обновите свой вопрос кодом, чтобы показать нам, что вы уже пробовали.

buhtz 01.06.2023 08:58
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
1
51
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Используйте форматирование Python для пользовательской строки:

data = pd.DataFrame({'CIPCODE':[4.2021,25.3434,51.201,34.5555]})

data['CIPCODE'] = data['CIPCODE'].apply('{:07.4f}'.format)

print (data)
   CIPCODE
0  04.2021
1  25.3434
2  51.2010
3  34.5555

              {:07.4f}
                ↑ ↑ 
                | |
# digits to pad | | # of decimal places to display

Пожалуйста, добавьте пояснения к вашему коду. Только код не является ответом.

buhtz 01.06.2023 08:58

Возможно, это не самый быстрый способ, но вы можете сделать это, поместив эту логику в функцию и применив ее к фрейму данных.

Пример:

import pandas as pd
from collections import deque

df = pd.DataFrame({'CIPCODE': [4.2021, 25.3434, 51.201, 34.5555]}) 

def format_cipcode(code):
    d = deque(code)
    if d[1] == '.':
        d.appendleft('0')
    if d[-4] == '.':
        d.append('0')
    return ''.join(d)


df['CIPCODE'] = df['CIPCODE'].astype(str).apply(format_cipcode)

print(df['CIPCODE'])

Выход:

Name: CIPCODE, dtype: object
0    04.2021
1    25.3434
2    51.2010
3    34.5555

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

Ответ принят как подходящий

Вы можете напрямую использовать форматирование Python (07.4f, что означает 4 цифры после запятой и дополнено до 7 символов):

df['formatted'] = df['CIPCODE'].apply(lambda x: f'{x:07.4f}')

Выход:

   CIPCODE formatted
0   4.2021   04.2021
1  25.3434   25.3434
2  12.3000   12.3000

Конечно бьет мой путь!

Kenneth Breugelmans 01.06.2023 09:07

Другие вопросы по теме