Перейти к содержимому

Как добавить незначащие нули в python

  • автор:

Как добавить ведущие нули в строки в Pandas

Вы можете использовать следующий синтаксис для добавления начальных нулей к строкам в кадре данных pandas:

df['ID'] = df['ID'].apply('7> '. format ) 

Эта конкретная формула добавляет столько начальных нулей, сколько необходимо, к строкам в столбце с заголовком «ID», пока каждая строка не будет иметь длину 7 .

Не стесняйтесь заменить 7 другим значением, чтобы добавить другое количество начальных нулей.

В следующем примере показано, как использовать этот синтаксис на практике.

Пример: добавление начальных нулей к строкам в Pandas

Предположим, у нас есть следующий кадр данных pandas, который содержит информацию о продажах и возвратах для различных магазинов:

import pandas as pd #create DataFrame df = pd.DataFrame() #view DataFrame print(df) ID sales refunds 0 A25 18 1 1 B300 12 3 2 C6 27 3 3 D447289 30 2 4 E416 45 5 5 F19 23 0 

Обратите внимание, что длины строк в столбце «ID» не все равны.

Однако мы видим, что самая длинная строка состоит из 7 символов.

Мы можем использовать следующий синтаксис для добавления начальных нулей к строкам в столбце «ID», чтобы каждая строка имела длину 7 :

#add leading zeros to 'ID' column df['ID'] = df['ID'].apply('7> '. format ) #view updated DataFrame print(df) ID sales refunds 0 0000A25 18 1 1 000B300 12 3 2 00000C6 27 3 3 D447289 30 2 4 000E416 45 5 5 0000F19 23 0 

Обратите внимание, что к строкам в столбце «ID» добавлены начальные нули, так что теперь каждая строка имеет одинаковую длину.

Примечание.Полную документацию по функции применения в pandas можно найти здесь .

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные задачи в pandas:

Вывод числа с ведущими нолями

Есть некий диапазон чисел, допустим, 0–100. Нужно вывести последовательно эти числа в формате вида 000, 001, 002, . 100 . То есть идет заполнение справа-налево (не знаю как это называется). Я понимаю, что можно условием все прогнать, но получается не так красиво.

for i in range(101): x = i if i < 10: x = '00' + str(i) elif i >= 10 and i  

А если числа не до 100, а до 1 000 000? Или вообще не известен диапазон? Есть ли иное решение?
Отслеживать
9,386 4 4 золотых знака 40 40 серебряных знаков 57 57 бронзовых знаков
задан 16 фев 2017 в 13:56
177 1 1 золотой знак 2 2 серебряных знака 9 9 бронзовых знаков

5 ответов 5

Сортировка: Сброс на вариант по умолчанию

Для Python >= 3.6, используйте f-string:

>>> x = 10 >>> print(f'') ^ желаемая длина строки 00010 

или метод format строки, который работает в любой версии:

''.format(10) # '00010' ^ желаемая длина строки 

Более подробно:

Желательно знать или вычислить максимальное количество позиций, которое потребуется для вывода числа max_width .

Если есть отрицательные числа, нужно учитывать, что знак будет занимать одну из позиций. Можно сделать так, чтобы знак выводился всегда.

Для дробных чисел нужно учитывать позицию для точки (запятой).

max_width = 5 print(f'>') # 00010 - вывод с добавлением нолей print(f'>') # -0010 - минус забирает одну позицию print(f'>') # -10000 - если число слишком большое, # строка будет длиннее, чем max_width print(f'>') # +0010 - обязательный вывод знака print(f'>') # 010.5 - точка забирает одну позицию print(f'>') # 10 - можно заполнять пробелами 

Подробнее про возможности форматирования можно почитать в документации:

  • Описание мини-языка форматирования
  • f-string
  • str.format

Перевернуть число

Вводится целое число. Вывести число, обратное введенному по порядку составляющих его цифр. Например, введено 3425, надо вывести 5243.

Решение задачи на языке программирования Python

Алгоритм:

  1. Найдем остаток от деления на 10 исходного (первого) числа. Тем самым получим последнюю его цифру. Запомним ее.
  2. Присвоим эту цифру новому (второму) числу-"перевертышу".
  3. Разделим нацело на 10 первое число. Тем самым избавимся от последней цифры в нем.
  4. Снова найдем остаток от деления на 10 того, что осталось от первого числа. Запомним цифру-остаток.
  5. Разделим нацело на 10 первое число. Избавимся от текущей последней цифры в нем.
  6. Умножим на 10 второе число. Тем самым увеличим его разрядность до двух и сдвинем первую цифру в более старший разряд.
  7. Добавим к полученному второму числу запомненную ранее цифру из первого числа.
  8. Будем повторять действия п. 4-7 пока первое число не уменьшится до нуля, т. е. пока не избавимся от всех его разрядов.
n1 = int(input("Введите целое число: ")) # Последнюю цифру первого числа переносим во второе digit = n1 % 10 n2 = digit # Избавляемся от последней цифры первого числа n1 = n1 // 10 while n1 > 0: # находим остаток - последнюю цифру digit = n1 % 10 # делим нацело - удаляем последнюю цифру n1 = n1 // 10 # увеличиваем разрядность второго числа n2 = n2 * 10 # добавляем очередную цифру n2 = n2 + digit print('"Обратное" ему число:', n2)

Примеры выполнения кода:

Введите целое число: 32809 "Обратное" ему число: 90823
Введите целое число: 78290 "Обратное" ему число: 9287

На самом деле мы можем не добавлять последнюю цифру первого числа во второе до цикла. Если присвоить n2 ноль, то в цикле при выполнении выражения n2 = n2 * 10 не будет происходить сдвига разряда, так как при умножении на 0 получается 0. И первая цифра будет добавляться в разряд единиц.

n1 = int(input("Введите целое число: ")) n2 = 0 while n1 > 0: digit = n1 % 10 n1 = n1 // 10 n2 = n2 * 10 n2 = n2 + digit print('"Обратное" ему число:', n2)

Приведенный алгоритм решения математический и соответствует задаче, если условие, что надо обрабатывать именно число, является строгим.

Однако средства Python позволяют решить подобную задачу более практично. Так у списков есть метод reverse , позволяющий изменять порядок элементов на обратный. Мы можем получить из исходной строки список символов, выполнить его реверс, после чего с помощью строкового метода join опять собрать в единую строку.

n1 = input("Введите целое число: ") n_list = list(n1) n_list.reverse() n2 = "".join(n_list) print('"Обратное" ему число:', n2)

Также можно воспользоваться взятием среза из исходной строки с первого до последнего символа с обратным шагом:

n1 = input("Введите целое число: ") n2 = n1[::-1] print('"Обратное" ему число:', n2)

Два последних варианта решения задачи - это способы переворота строки, а не числа как такового. Если объект, который надо переверуть, изначально имеет числовой тип данных (например, генерируется функцией randint() ), то его придется преобразовывать в строковый тип данных с помощью функции str() . И если на выходе мы должны получить опять же число, то надо будет строку превращать обратно в число с помощью функции int() .

from random import randint print("Исходное число:", end=' ') n1 = randint(5000, 1000000) print(n1) n1 = str(n1) n2 = n1[::-1] n2 = int(n2) print('"Обратное" ему число:', n2) 
Исходное число: 970334 "Обратное" ему число: 433079

X Скрыть Наверх

Решение задач на Python

Как допустить запись нескольких нулей перед неравным нулю числом?

Здравствуйте. Никак не могу найти, как осуществить такое:

У меня есть строка, допустим
s_num = '0001'
Мне нужно перевести эту переменную в числовое значение без потери нулей:

int(s_num) # 0001 как полноценное число, с которым можно работать, но при такой записи сбрасываются нули

Например, мне к нему надо прибавить число 1:
int(s_num) + 1 # мне нужно получить число 0002
Подскажите, как можно сделать это?

  • Вопрос задан более трёх лет назад
  • 1015 просмотров

Комментировать
Решения вопроса 2
ishmatov_rus @ishmatov_rus
s_num = "0001"
s = str(int(s_num) + 1).zfill(len(s_num))
print(s)
Ответ написан более трёх лет назад
Нравится 3 1 комментарий

nochangez

nochangez @nochangez Автор вопроса
Спасибо за ответ. Это подходит)

phaggi

Алан Гибизов @phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю

В python есть специальная функция (или, наверно, метод?) zfill(), предназначенная именно для дополнения строки до нужной длины нулями слева. Т.е. при выводе легко восстановить нужную длину печатаемого числа, превратив его в строку и напустив на него zfill(кол-во знаков, до которого надо добить нулями).

Ответ написан более трёх лет назад
Нравится 2 1 комментарий

nochangez

nochangez @nochangez Автор вопроса
Спасибо за ответ. Это как раз то, что надо)
Ответы на вопрос 3

Нельзя. Да и какой в этом смысл?
Если вам нужно отобразить это число с нулями, то "%04d" % s_num после любых арифметических операций.

Ответ написан более трёх лет назад
Нравится 3 1 комментарий

nochangez

nochangez @nochangez Автор вопроса

Спасибо за ответ. Это задача с codewars, там нужно, чтобы последние числа в строке прибавлялись на одну числовую единицу, а в примерах конечное число падает с левыми нулями.
Мне скорее подходит решение с методом zfill()
Спасибо.

Сергей Ильин @sunsexsurf
IT & creative

какая-то задача из вакуума. Но, положим, я бы сделал так:
1/ посчитал бы количество нулей с начала строки.
2/ отрезал бы их и превратил оставшееся число в инт
3/ сложил-уножил-поделил-чего там еще
4/ перевел бы результат обратно в строку
5/ добавил то, количество нулей, которое получил бы в п.1
5-1/ если нужно сократить нули при переходе через порядок (единицы - десятки - сотни и т.д.), то написал бы что-то вроде цикла, который смотрит, сколько раз число разделилось на 10 нацело. и потом на это число уменьшал бы количество нулей из п.1

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *