在Python数据帧中将索引定义为日期-时间



使用R已经好几年了,我开始冒险学习python,首先编辑一些现有的代码。

我有一个从netCDF文件导入的时间变量,如下所示:

import netCDF4 as nc
import numpy as np
import datetime
import pandas as pd
f = nc.Dataset(fname)
time = nc.num2date(f.variables['time'][:],
f.variables['time'].units)
nc_dims = [dim for dim in f.dimensions] 

时间变量被添加到数据帧df:中名为'dates'的列中

df['dates'] = time

然后将其转换为索引:

df = df.set_index('dates')

为数据帧定义了两个新列,这两个列都要求索引具有正确的日期时间数据格式(我认为(。

df['season'] = (df.index.month) % 12 + 3) // 3
df['day'] = np.floor(df.index.to_julian_date().values - 0.5)

但是,当代码在命令提示符下运行时,会出现错误:

AttributeError:"Index"对象没有属性"month";和

"Index"对象没有属性"to_julian_date">

这让我认为索引对象没有正确定义为日期-时间对象(因此month调用不起作用(,而且它不知道它可以将对象转换为julian日期格式。要么是这样,要么我错过了一个重要的包裹。

我已经尝试使用转换索引

pd.Timestamp(time)
df = df.set_index(pd.DatetimeIndex('dates'))
df.index = pd.to_datetime(df.index)

但是获取指示索引对象已采用日期-时间格式的错误:

TypeError:无法转换输入[[cftime.DatetimeGregory(2011-01-0100:30:00.13(类型错误:为无法转换为datetime TypeError:无法转换为日期时间

知道这些代码确实在我的同事环境中运行,我觉得我错过了拼图中的一个重要部分。任何人可以提供的任何帮助,可以帮助我调试这一点,非常感谢!

编辑:

以下是一个小样本数据:

iveg_1  iveg_2  patchfrac_1  patchfrac_2
dates
2011-01-01 00:30:00.13       2       6          1.0          0.0
2011-01-01 01:00:00          2       6          1.0          0.0
2011-01-01 01:30:00          2       6          1.0          0.0
2011-01-01 02:00:00.13       2       6          1.0          0.0
2011-01-01 02:30:00          2       6          1.0          0.0
2011-01-01 03:00:00          2       6          1.0          0.0
2011-01-01 03:30:00.13       2       6          1.0          0.0
2011-01-01 04:00:00          2       6          1.0          0.0
2011-01-01 04:30:00          2       6          1.0          0.0
2011-01-01 05:00:00.13       2       6          1.0          0.0

首先尝试转换为字符串:

df['dates'] = time
df['dates'] = pd.to_datetime(df['dates'].astype('str'))
df = df.set_index('dates')

使用df.info()验证您是否正在使用DateTimeIndex

DateTimeIndex对象将允许您从中提取日期信息,例如其月份或转换.to_julian_date()