Вы можете использовать mark_set
метод с меткой insert
.
Например:
t.mark_set('insert', '2.3')
или
t.mark_set(INSERT, '2.3')
Над кодом будет позиционировать курсор после третьего символа в 2-й строке.
Попробуйте:
df['ID'] = df['ID'].apply(lambda x: '{0:0>15}'.format(x))
или даже
df['ID'] = df['ID'].apply(lambda x: x.zfill(15))
Это может быть достигнуто с помощью одной строки при инициализации. Просто используйте аргумент преобразователей .
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 также имеют этот аргумент.
str
содержит большинство методов в строке.
df['ID'] = df['ID'].str.zfill(15)
Подробнее: http://pandas.pydata.org/pandas-docs/stable/text.html
С 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()
lambda
для первого:apply('{:0>15}'.format)
тоже должен работать. – DSM 23 May 2014 в 19:58