使用dataframe进行Pandas数据时间转换

时间:2017-08-29 13:37:35

标签: python pandas datetime numpy

我的时间以我的数据框格式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')

谢谢!

1 个答案:

答案 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对象,被设置为数据帧的索引。