python - 如何删除整数类型列中的最后两位数字?

标签 python pandas dataframe integer

如何删除 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

实现此目标的最简单方法是什么?

最佳答案

使用 astype 将 dtype 转换为 str然后使用矢量化 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 倍的加速

关于python - 如何删除整数类型列中的最后两位数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33034559/

相关文章:

python - 套接字可以同时监听和连接吗

python - 在python中将Dataframe列转换为时间格式

python - Pandas中Groupby进行跨组匹配的可能性

python - SQLAlchemy 线程中的事务安全吗?

python - pandas/json 中的点表示法

python-3.x - Pandas - 根据两个数据帧之间的公共(public)列聚合另一个数据帧的列值

python - 是什么导致了一个简单的函数调用导致此 KeyError?

python - Pandas 根据日期范围 +/- x 天进行计数和求和

python - 如何在数据集上使用 pandas 找到中位数?

python - 如何在 pandas 的特定列添加列表值?