简体   繁体   English

更改pandas日期格式以删除前导零的更好方法?

[英]Better way to change pandas date format to remove leading zeros?

DataFrame look like: DataFrame看起来像:

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

I converted them to my desired format successfully but it seems very inefficient. 我成功地将它们转换为我想要的格式,但它似乎非常低效。

   OPENED
0   40728
1  100302
2   51026
3   60630
4  120921

The code that I used for the date conversion is: 我用于日期转换的代码是:

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"))

You can use str.replace , then remove first 2 chars by str[2:] and last remove leading 0 by str.lstrip : 您可以使用str.replace ,然后通过str[2:]删除前2个字符,最后通过str.lstrip删除前导0

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

If dtype is already datetime use strftime and str.lstrip : 如果str.lstrip已经是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

Thank you Jon Clements for comment: 谢谢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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM