Как удалить последние две цифры в столбце, который имеет целочисленный тип?

Как удалить последние две цифры столбца фрейма данных типа int64?

df['DATE'] включает в себя:
DATE
20110708
20110709
20110710
20110711
20110712
20110713
20110714
20110815
20110816
20110817

что я хотел бы:

DATE
201107
201107
201107
201107
201107
201107
201107
201108
201108
201108

какой самый простой способ достичь этого?

2 ответов


преобразование dtype в str с помощью astype затем используется векторизованный str метод, чтобы нарезать str, а затем преобразовать обратно в int64 dtype снова:

In [184]:
df['DATE'] = df['DATE'].astype(str).str[:-2].astype(np.int64)
df

Out[184]:
     DATE
0  201107
1  201107
2  201107
3  201107
4  201107
5  201107
6  201107
7  201108
8  201108
9  201108

In [185]:    
df.info()

<class 'pandas.core.frame.DataFrame'>
Int64Index: 10 entries, 0 to 9
Data columns (total 1 columns):
DATE    10 non-null int64
dtypes: int64(1)
memory usage: 160.0 bytes

Мда...

оказывается, есть встроенный метод floordiv:

In [191]:
df['DATE'].floordiv(100)

Out[191]:
0    201107
1    201107
2    201107
3    201107
4    201107
5    201107
6    201107
7    201108
8    201108
9    201108
Name: DATE, dtype: int64

обновление

для 1000 строк df,floordiv метод значительно быстрее:

%timeit df['DATE'].astype(str).str[:-2].astype(np.int64)
%timeit df['DATE'].floordiv(100)

100 loops, best of 3: 2.92 ms per loop
1000 loops, best of 3: 203 µs per loop

здесь мы наблюдаем ~10x ускорение


вы можете использовать разделение пола // чтобы удалить последние две цифры и сохранить целочисленный тип:

>>> df['DATE'] // 100
     DATE
0  201107
1  201107
2  201107
3  201107
4  201107
5  201107
6  201107
7  201108
8  201108
9  201108