Python: как добавить нули в записи столбца фрейма данных? [Дубликат]

Вы можете использовать mark_set метод с меткой insert.

Например:

t.mark_set('insert', '2.3')

или

t.mark_set(INSERT, '2.3')

Над кодом будет позиционировать курсор после третьего символа в 2-й строке.

24
задан jpp 13 July 2018 в 15:19
поделиться

5 ответов

Попробуйте:

df['ID'] = df['ID'].apply(lambda x: '{0:0>15}'.format(x))

или даже

df['ID'] = df['ID'].apply(lambda x: x.zfill(15))
34
ответ дан Rohit 16 August 2018 в 11:31
поделиться
  • 1
    Нет необходимости в lambda для первого: apply('{:0>15}'.format) тоже должен работать. – DSM 23 May 2014 в 19:58
  • 2
    @DSM Ницца. Не знал этого. – Rohit 23 May 2014 в 20:41
  • 3
    Это может быть достигнуто с помощью одной строки при инициализации, см. Мой ответ ниже. – Daniil Mashkin 2 May 2018 в 15:27

Это может быть достигнуто с помощью одной строки при инициализации. Просто используйте аргумент преобразователей .

df = pd.read_excel('filename.xlsx', converters={'ID': '{:0>15}'.format})

, поэтому вы уменьшите длину кода наполовину:)

df = pd.read_excel('filename.xlsx')
df['ID'] = df['ID'].str.zfill(15) # df['ID'] = df['ID'].apply(lambda x: '{0:0>15}'.format(x))

PS: read_csv также имеют этот аргумент.

2
ответ дан Daniil Mashkin 16 August 2018 в 11:31
поделиться

str содержит большинство методов в строке.

df['ID'] = df['ID'].str.zfill(15)

Подробнее: http://pandas.pydata.org/pandas-docs/stable/text.html

27
ответ дан Guangyang Li 16 August 2018 в 11:31
поделиться

С Python 3.6+ f-строки обеспечивают хорошую производительность:

df['ID'] = df['ID'].apply(lambda x: f'{x:0>15}')

Для дополнительного ускорения вы можете использовать понимание списка вместо pd.Series.apply.

Некоторые бенчмаркинга на Python 3.6 / Pandas v0.19.2:

df = pd.concat([df]*1000)

%timeit df['text1'].apply(lambda x: f'{x:0>15}')        # 4.77 ms per loop
%timeit df['text1'].astype(str).str.zfill(15)           # 16.8 ms per loop

%timeit [f'{x:0>15}' for x in df['text1'].values]       # 4.69 ms per loop
%timeit [str(x).zfill(15) for x in df['text1'].values]  # 17.6 ms per loop

x = df['text1'].apply(lambda x: f'{x:0>15}')
y = df['text1'].astype(str).str.zfill(15)

assert (x == y).all()
1
ответ дан jpp 16 August 2018 в 11:31
поделиться
0
ответ дан Deskjokey 29 October 2018 в 12:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: