如何删除整数类型列中的最后两位数字?
How to remove last the two digits in a column that is of integer type?
如何删除 int64 类型的 DataFrame 列的最后两位数字?
例如df['DATE']
包括:
DATE
20110708
20110709
20110710
20110711
20110712
20110713
20110714
20110815
20110816
20110817
我想要的是:
DATE
201107
201107
201107
201107
201107
201107
201107
201108
201108
201108
实现此目的的最简单方法是什么?
将 dtype 转换为 str 使用 astype
then used vectorised 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
这里我们观察到~10 倍的加速
您可以使用 floor 除法 //
删除最后两位数字并保留整数类型:
>>> df['DATE'] // 100
DATE
0 201107
1 201107
2 201107
3 201107
4 201107
5 201107
6 201107
7 201108
8 201108
9 201108
如何删除 int64 类型的 DataFrame 列的最后两位数字?
例如df['DATE']
包括:
DATE
20110708
20110709
20110710
20110711
20110712
20110713
20110714
20110815
20110816
20110817
我想要的是:
DATE
201107
201107
201107
201107
201107
201107
201107
201108
201108
201108
实现此目的的最简单方法是什么?
将 dtype 转换为 str 使用 astype
then used vectorised 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
这里我们观察到~10 倍的加速
您可以使用 floor 除法 //
删除最后两位数字并保留整数类型:
>>> df['DATE'] // 100
DATE
0 201107
1 201107
2 201107
3 201107
4 201107
5 201107
6 201107
7 201108
8 201108
9 201108