#python #pandas #for-loop #leading-zero
#python #pandas #для цикла #ведущий ноль
Вопрос:
Я просмотрел множество других вопросов, но не нашел ни одного, который бы вполне подходил.
Допустим, у меня есть фрейм данных, df:
Name Month
Bob 5
Jim 7
Mary 12
Я пытаюсь написать цикл for, который добавлял бы начальный ноль к месяцам с одной цифрой (и просто печатал другие месяцы как есть), а затем я могу перезаписать столбец списком.
Вот что у меня есть
list={}
for i in df['Month']:
if len(df['Month'][i]) < 2:
print("{:02}".format(i))
else:
print(i)
print(list)
df['Month']=list
Подобный код выдает мне ошибку:
TypeError: object of type 'numpy.int64' has no len()
Я не совсем уверен, где это устранить или куда идти дальше. Спасибо!
Комментарии:
1. Вы смешиваете 2 способа выполнения циклов: — для i в df [‘Месяц’] будет вычисляться до 5, затем 7, затем 12. — вероятно, вы имели в виду сделать «для i в диапазоне (0, len (df[‘Месяц’]
2. К сожалению, для этого мне приходится использовать цикл (это для назначения), поэтому я не могу использовать обходной путь с zfill. Спасибо, троллолдем, я рассмотрю возможность изменения этой части.
Ответ №1:
Поехали (без цикла):
df["Month"] = df.Month.map("{:02}".format)
Комментарии:
1. Это намного элегантнее, чем цикл 🙂
Ответ №2:
Вы можете попробовать это:
df = pd.read_csv('file.csv', converters={'Month': '{:0>2}'.format}).astype('str')
print(df)
Ответ №3:
df['Month'].astype(str).str.zfill(2)
Ответ №4:
Используйте zfill для этого:
df['Month'] = df['Month'].astype(str).str.zfill(2)
print(df)
Name Month
0 Bob 05
1 Jim 07
2 Mary 12