JAB*_*JAB 5 python datetime pandas
我试图将字段解释为日期,更改日期以表示日期显示的月份,将日期偏移一个月,然后将其表示为没有时间戳的日期.我最终得到了看起来和感觉太笨重的东西:
df['DATE'].apply( lambda d: pd.to_datetime(pd.to_datetime(d).to_period('M').to_timestamp('M')\
- np.timedelta64(1,'M')).date())
Run Code Online (Sandbox Code Playgroud)
时间戳是这种格式的字符串:
2012-09-01 00:00:00
Run Code Online (Sandbox Code Playgroud)
有什么想法更好的方法吗?谢谢.
好吧,你可以避免应用并进行矢量化(我认为这会使它更好一些):
print df
date x1
0 2010-01-01 00:00:00 10
1 2010-02-01 00:00:00 10
2 2010-03-01 00:00:00 10
3 2010-04-01 00:00:00 10
4 2010-04-01 00:00:00 5
5 2010-05-01 00:00:00 5
df['date'] = (pd.to_datetime(df['date']).values.astype('datetime64[M]')
- np.timedelta64(1,'M'))
print df
date x1
0 2009-12-01 10
1 2010-01-01 10
2 2010-02-01 10
3 2010-03-01 10
4 2010-03-01 5
5 2010-04-01 5
Run Code Online (Sandbox Code Playgroud)
当然,datetime64[ns]由于大熊猫总能转换为日期,因此日期仍然存在.
编辑:假设您想要上个月的结束而不是上个月的开始:
df['date'] = (pd.to_datetime(df['date']).values.astype('datetime64[M]')
- np.timedelta64(1,'D'))
print df
date x1
0 2009-11-30 10
1 2009-12-31 10
2 2010-01-31 10
3 2010-02-28 10
4 2010-02-28 5
5 2010-03-31 5
Run Code Online (Sandbox Code Playgroud)
编辑:杰夫指出,更为简洁的方法是使日期为a DatetimeIndex并使用日期偏移.所以类似于:
df['date'] = pd.Index(df['date']).to_datetime() - pd.offsets.MonthBegin(1)
print df
date x1
0 2009-12-01 10
1 2010-01-01 10
2 2010-02-01 10
3 2010-03-01 10
4 2010-03-01 5
5 2010-04-01 5
Run Code Online (Sandbox Code Playgroud)
或月末:
df['date'] = pd.Index(df['date']).to_datetime() - pd.offsets.MonthEnd(1)
print df
date x1
0 2009-12-31 10
1 2010-01-31 10
2 2010-02-28 10
3 2010-03-31 10
4 2010-03-31 5
5 2010-04-30 5
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4030 次 |
| 最近记录: |