2016-08-18 78 views
3

數據框的樣子:改變熊貓日期格式以刪除前導零的更好方法?

 OPENED 
0 2004-07-28 
1 2010-03-02 
2 2005-10-26 
3 2006-06-30 
4 2012-09-21 

我把它們轉換成我想要的格式成功,但它似乎非常低效。

OPENED 
0 40728 
1 100302 
2 51026 
3 60630 
4 120921 

,我使用的日期轉換的代碼是:

df['OPENED'] = pd.to_datetime(df.OPENED, format='%Y-%m-%d') 
df['OPENED'] = df['OPENED'].apply(lambda x: x.strftime('%y%m%d')) 
df['OPENED'] = df['OPENED'].apply(lambda i: str(i)) 
df['OPENED'] = df['OPENED'].apply(lambda s: s.lstrip("0")) 

回答

4

您可以使用str.replace,然後通過str[2:]和最後拆下通往0去除前2個字符由str.lstrip

print (type(df.ix[0,'OPENED'])) 
<class 'str'> 
print (df.OPENED.dtype) 
object 

print (df.OPENED.str.replace('-','').str[2:].str.lstrip('0')) 
0  40728 
1 100302 
2  51026 
3  60630 
4 120921 
Name: OPENED, dtype: object 

如果dtype已經是datetime請使用strftimestr.lstrip

print (type(df.ix[0,'OPENED'])) 
<class 'pandas.tslib.Timestamp'> 
print (df.OPENED.dtype) 
datetime64[ns] 

print (df.OPENED.dt.strftime('%y%m%d').str.lstrip('0')) 
0  40728 
1 100302 
2  51026 
3  60630 
4 120921 
Name: OPENED, dtype: object 

感謝您Jon Clements發表評論:

print (df['OPENED'].apply(lambda L: '{0}{1:%m%d}'.format(L.year % 100, L))) 
0  40728 
1 100302 
2  51026 
3  60630 
4 120921 
Name: OPENED, dtype: object 
+1

而只是在那裏把它扔出去。'DF [ '' 打開]申請(拉姆達L:「{0} {1:% m%d}'。格式(L.year%100,L))' –

+0

@JonClements - 謝謝,我將它添加回答。 – jezrael

+0

謝謝你們,正是我在找的:)。出於好奇,你用來解決這個問題的Python概念是什麼?我很新,很可怕,你可能會說,我想學習 – anshanno