С 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()
вы не можете использовать getWindow в сервисе, потому что он связан с потоком пользовательского интерфейса, вместо этого вы можете использовать WindowManger