2015-10-09 32 views
7

如何刪除類型爲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 

什麼是實現這一目標的最簡單的方法?

回答

12

轉換的D型使用astype然後使用矢量化str法裁STR爲str,然後再轉換回再次int64 D型:

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倍的加速

+0

僅供參考注:樓層劃分比str方法快得多。 – Zero

+0

@零確實,我應該添加計時,我會稍後添加它們 – EdChum

+0

@零增加計時 – EdChum

6

你可以使用地板師//放棄最後兩個數字並保留整數類型:

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