python число в строку с ведущими нулями
Как сохранить ведущие нули в целых числах Python для форматирования строк
У меня есть то, что я считаю простым вопросом. У меня есть следующий код и вывод не то, что я ожидаю:
Моя проблема в том, что r печатается как «31508.78», а я хочу «031508.78». Как мне сохранить ведущий ноль?
4 ответа
0 перед числом не имеет значения для python, потому что числа не имеют ведущих нулей. Ты можешь использовать:
Для Python нет разницы в следующих вещах:
Итак, когда вы хотите, чтобы начальный ноль, вы должны явно указать Python, чтобы он поместил его туда, потому что он просто не знает об этом. Вы просто использовали одно из многих допустимых представлений, чтобы указать это число, в котором строковое представление по умолчанию не содержит начальных нулей.
Или, если вы на самом деле не хотите число, вы также можете просто указать число в виде строки для начала, которая, конечно, сохраняет ведущий ноль.
Я не думаю, что есть какой-либо способ сохранить число с нулем в Python. Это оставляет вам два пути:
1) Сделать строку r, т. Е. R = «031408.78»
Я думаю, что это лучший метод для вас, так как вы можете выполнить всю арифметику, которую вы хотите сделать (используя неявное приведение типов python), и видеть число, к которому добавляется 0, где бы вы его не использовали.
2) Если вы просто хотите напечатать число с ведущими нулями, подумайте об этом
Я предпочитаю новый формат строки мини-язык. Я нахожу это более интуитивным.
Добавить ведущие нули на основе условия в Python
У меня есть датафрейм с 5 миллионами строк. Допустим, датафрейм выглядел так, как показано ниже:
Обратите внимание, что столбец Random хранится в виде строки.
Если число в столбце Random содержит менее 9 цифр, я хочу добавить начальные нули, чтобы сделать его 9 цифрами. Если число имеет 9 или более цифр, я хочу добавить начальные нули, чтобы сделать его 20 цифрами.
Я сделал следующее:
Поскольку количество строк превышает 5 миллионов, этот процесс занимает много времени! (производительность была 5it / sec. Протестировано с использованием tqdm, предполагаемое время завершения было в днях!).
Есть ли более простой и быстрый способ выполнения этой задачи?
5 ответов
Сравнение скорости по миллиону строк строк со значениями произвольной длины (от 5 символов до 30):
(Строка target = df.copy() необходима, чтобы убедиться, что каждый повторный тестовый прогон изолирован от предыдущего.)
Вывод: на 1 млн строк использование np.where() примерно на 10% медленнее.
Это примерно в 3 раза быстрее!
Я использовал ‘apply’ в сочетании с функцией fill_zeros, написанной ниже, чтобы получить время выполнения 603 мс на кадре данных из 1 000 000 строк.
Так как вы спрашиваете об эффективности, строковые операции являются одной из распространенных «ошибок» в Pandas, поскольку, хотя они векторизованы (то есть вы можете применить их ко всей серии за один раз), это делает not означает, что они более эффективны, чем зацикливание, и это один из примеров, когда зацикливание на самом деле будет быстрее, чем использование метода доступа к строкам, что, как правило, больше для удобства, чем для скорости.
Если вы сомневаетесь, убедитесь, что ваше время работает с вашими фактическими данными, так как то, что вы думаете, может быть неуклюжим и медленным, может быть быстрее, чем то, что выглядит чистым!
Я собираюсь предложить очень простую функцию зацикливания, которая, я думаю, превзойдет любой подход, использующий строковый метод доступа.
Записки океанолога — обработка и визуализация данных
Вставляем нули перед цифрами, Python
Published by magik on 26 апреля, 2008 10:24 пп under MATLAB, nix, Python, Обработка данных, Без рубрики
Задача: написать функцию которая переводит целое число в строку определённого размера, содержащую это целое число и нули.
�?нструменты: Python, модули os, sys
UPD: Пост, конечно, смешной, потому как всё что я здесь расписываю в Питоне решается на раз без написания всяких функций. Смотри коменты. Продолжать читать имеет смысл только если хочется узнать зачем же нам решать такую задачу 🙂 Ещё можно добавить в коменты свой вариант решения, не только на питоне 🙂
Сразу скажу что я абсолютно уверен что эта задача решается в питоне какой ни будь встроенной функцией, и буду благодарен, если кто ни будь мне на неё укажет. Мне же, к сожалению, ничего раскопать не удалось. Ещё больше я уверен в том что это делает и какой-нибудь awk в одну строчку, но мне нужна была питоновская функция.
Для чего это нужно? Сделано это было для чтения модельных файлов, у которых имена определяются именно таким образом, но потом оказалось полезным и для создания gif файлов из ps при помощи convert (чтоб сортировало по порядку). Хотя ещё позже обнаружилось что gif файлы прекрасно создаются и без этого :))). Оба примера я приведу. Также приведу оригинальную функцию для MATLAB, которая делает то же самое.
Объяснений много не будет, потому что объяснять там особо нечего )
Usage:
myint2str(x, n)
Function padds integer x with zeros to n locations
rres = zzeros+ str ( x )
return rres
Чтоб лишний раз не травмировать моск комрада lorien вставил докстринг (да будут преданы анафеме те кто этого не делает, на самом деле) и постарался оформить код поприличней, при этом уверен что опять где нить напортачил и от канона PEP 8 отступил 🙂
Функция принимает в качестве аргументов целое число, которое мы будем конвертить и количество позиций в создаваемой нами строке. Всё просто до безобразия.
In [1]: from myint2str import *
In [2]: myint2str(333, 10)
Out[2]: ‘0000000333’
Как это дело использовать.
Если какая то программа создаёт выходные файлы, дописывая к каждому из них номер по порядку, то это вызывает известные трудности с алфавитно-числовой сортировкой. Например, решив перевести многостраничный ps файл в png
вы получите примерно такую неприятную картину:
HEFF_0-70560-0.png
HEFF_0-70560-1.png
HEFF_0-70560-10.png
HEFF_0-70560-100.png
HEFF_0-70560-101.png
HEFF_0-70560-102.png
HEFF_0-70560-103.png
HEFF_0-70560-104.png
HEFF_0-70560-105.png
HEFF_0-70560-106.png
HEFF_0-70560-107.png
HEFF_0-70560-108.png
HEFF_0-70560-109.png
HEFF_0-70560-11.png
Просмотрщик рисунков, например, в человеческом порядке смотреть это откажется, потому что по его правилам сортировки после 1 идёт 10, а потом 100. Тот же convert, если вам захочется создать gif анимацию, после 109-го рисунка впихнёт 11-й и ничего вы с ним не сделаете (кто знает как сделать, скажите как! 🙂 ).
Чтобы обойти это безобразие был написан следующий скрипт:
На входе задаётся имя файла и количество страниц в вашем .ps файле.
Конвертируем .ps, при помощи convert, при этом вырезая только то что нам надо:
input_file[:-3] — это имя входного файла без расширения .ps
Далее мы запускаем цикл в котором поочерёдно все созданные нами .png файлы переименовываем из вида input_file[:-3]-111.png в вид input_file[:-3]-00111.png. Теперь они у нас расположатся в приятном глазу порядке:
HEFF_0-70560-00000.png
HEFF_0-70560-00001.png
HEFF_0-70560-00002.png
HEFF_0-70560-00003.png
HEFF_0-70560-00004.png
HEFF_0-70560-00005.png
HEFF_0-70560-00006.png
HEFF_0-70560-00007.png
HEFF_0-70560-00008.png
HEFF_0-70560-00009.png
HEFF_0-70560-00010.png
HEFF_0-70560-00011.png
то в анимации всё будет по порядку (ну и задержка между фреймами из за delay будет 30 миллисекунд).
Продвинутые создатели gif анимаций, конечно, такими извратами не пользуются и просто пишут:
Но, если вы решите остановиться на уровне .png, то данный скрипт может пригодиться 🙂
В заключении матлабовская версия функции, написанная Dimitris Menemenlis из JPL для матлабовкого пакета обработки данных MITgcm модели: :
function s=myint2str ( x,n ) ;
%MYIN2STR(X,N) convert integer to string with leading zeros
% padds integer X with zeros to N locations
s= int2str ( x ) ;
n=n- length ( s ) ;
for i = 1 :n
s= [ ‘0’ s ] ;
end
15 комментариев
Чорт :((( опозорилсо ))
Ну пусть живёт в назидание потомкам )))
Ещё так можно:
>>> str(333).rjust(10, ‘0’)
‘0000000333’
Блин, где вы раньше были )))
Спасибо, огромное!
Предлагаю устроить конкурс — кто больше вариантов сделает, и не только на питоне )
Я попытался решить, но голяк…не понял прикола совсем..(
А еще, если строку надо повторить несколько раз, можно ее просто умножить:
for zz in range(1,n-string_len,1):
zzeros = zzeros ‘0’
Метод zfill, распознаёт минусы
2Caujka
�? то правда )
Народ, подскажите, а какой вариант лучше юзать? с форматированием аля С или функции-члены класса?
Что значит «лучше»? ) Лучше для кого? Для Санта-Клауса? Ему, мне кажется, без разницы, что вы будете использовать 🙂
Что тут не понятного? Какие-то функции,классы итд — устарелые, какие-то с граблями или не портируемыю.
«Устарелых» функций среди перечисленных я не заметил. Про портируемость я не в курсе — я только с CPython 2.4(2.5) обычно работаю. А грабли найти в любой функции и языке при желании можно, хотя в PHP их, конечно, на порядок больше 😉
По поводу портируемости — это вроде самые что ни на есть стандартные функции. будут везде и всегда )
По поводу скорости не скажу, но на мой взгляд ни в первом ни во втором случае особо ничего не тратится ))
esli variantu to togda mojno i vot etot
def nuller(vl, nuls):
return (nuls — len(str(vl)))*’0′ str(vl)
Like!! I blog quite often and I genuinely thank you for your information. The article has truly peaked my interest.
Generic Viagra Fast Delivery cialis online canada Cialis 10mg Forum cialis online ordering Amoxicillin Prescribing Information For Uti’S
Here are some links to web sites that we link to simply because we think they’re really worth visiting.
Here is a superb Blog You may Find Fascinating that we encourage you to visit.
The time to read or go to the material or websites we’ve linked to beneath.
We like to honor numerous other world-wide-web web pages around the net, even when they aren
If some one wants to be updated with most up-to-date technologies then he must be pay a visit this web site and be up to date everyday.|
Числа: целые, вещественные, комплексные
Числа в Python 3: целые, вещественные, комплексные. Работа с числами и операции над ними.
Целые числа (int)
Числа в Python 3 ничем не отличаются от обычных чисел. Они поддерживают набор самых обычных математических операций:
Также нужно отметить, что целые числа в python 3, в отличие от многих других языков, поддерживают длинную арифметику (однако, это требует больше памяти).
Битовые операции
Над целыми числами также можно производить битовые операции
x | y | Побитовое или |
x ^ y | Побитовое исключающее или |
x & y | Побитовое и |
x > y | Битовый сдвиг вправо |