我的时间以我的数据框格式YYYYMMDDhhmm
存储,例如。 200902110403
。
Pandas可以自动将其转换为datetime
对象,我这样做:
temp_date=(pd.to_datetime(indexed_data.index.str[0:12], infer_datetime_format=True)).to_pydatetime()
(我不完全理解datetime
对象和datetimeindex
之间的区别,但我不认为这是我问题的根源)
然后我使用data2num
库中的netcdf4
函数将此转换为自我的参考时间以来的日期,
days=date2num(temp_date, 'days since 2009-01-01')
这可以工作并返回我想要的日子
array([ 212.03333333, 212.03333333, 212.03472222, ..., 242.95416667,
242.95416667, 242.99583333])
问题在于它似乎并不是一次性工作,我不明白为什么。
为什么这不起作用?
indexed_data['date']=(pd.to_datetime(indexed_data.index.str[0:12], infer_datetime_format=True)).to_pydatetime()
indexed_data['days']=date2num(indexed_data['date'], 'days since 2009-01-01')
TypeError:ufunc subtract不能使用类型为dtype的操作数('
但这样做:
temp_date=(pd.to_datetime(indexed_data.index.str[0:12],infer_datetime_format=True)).to_pydatetime()
indexed_data['date']=temp_date
indexed_data['fdays']=date2num(temp_date, 'days since 2009-01-01')
谢谢!
答案 0 :(得分:1)
我不熟悉netcdf4
,但你应该能够在没有它的情况下完成你想要的东西:
date_strs = ['200902110403', '200902120403', '200902130403', '200902140403', '200902150403']
df = pd.DataFrame(date_strs, columns=['Date'])
df['Date'] = pd.to_datetime(df['Date'], infer_datetime_format=True)
df['Date']
0 2009-02-11 04:03:00
1 2009-02-12 04:03:00
2 2009-02-13 04:03:00
3 2009-02-14 04:03:00
4 2009-02-15 04:03:00
Name: Date, dtype: datetime64[ns]
要获取自参考日期起经过的时间,您可以减去两个返回datetime
对象的timedelta
个对象:
(df['Date'] - pd.to_datetime('2009-01-01'))
0 41 days 04:03:00
1 42 days 04:03:00
2 43 days 04:03:00
3 44 days 04:03:00
4 45 days 04:03:00
Name: Date, dtype: timedelta64[ns]
如果您只想将天数作为整数,则可以在上述系列中调用.dt.days
访问者:
df['Days'] = (df['Date'] - pd.to_datetime('2009-01-01')).dt.days
df['Days']
0 41
1 42
2 43
3 44
4 45
Name: Days, dtype: int64
datetimeindex
对象只是一个datetime
对象,被设置为数据帧的索引。