如何用不完整的数据集创建5分钟间隔的日期时间索引(Python)
这是我第一次在这里发帖,希望能有所收获 :)
简单来说,我有一个CSV文件,里面包含时间序列数据。我正在用 pandas.read_csv
从这个CSV文件创建一个数据框(dataframe)。不过,它的组织方式有点麻烦,第一列是日期,第二列是每天的5分钟间隔(比如0, 5, 10, 15,一直到1435)。更复杂的是,有些天的数据不完整,也就是说,有些行缺失。因此,对于某个特定的日期,时间间隔可能是5, 10, 60, 505等等。这就意味着我不能简单地从头开始创建一个5分钟间隔的日期时间索引。
所以,我需要找到一种方法,把B列的数据和A列的日期结合起来,得到我想要的时间序列。我必须把这个结果列附加到同一个数据框中,然后用它作为索引,这样我才能计算出每小时的数据平均值。
经过很多的努力,我目前得到了这个代码,它生成了一个新的时间列表。就我所知,前面的部分是正确的。
df = pd.read_csv(myfile)
newtime = []
for r in df['Time']:
if r // 60 < 10:
if r % 60 < 10:
r = "0" + str(r // 60) + ":0" + str(r % 60) + ":00"
else:
r = "0" + str(r // 60) + ":" + str(r % 60) + ":00"
else:
if r % 60 < 10:
r = str(r // 60) + ":0" + str(r % 60) + ":00"
else:
r = str(r // 60) + ":" + str(r % 60) + ":00"
newtime.append(r)
datetimes = []
for r in range(len(df['Date'])+1):
v = str(df['Date'][r]) + newtime[r]
datetimes.append(v)
print datetimes
但是,当我尝试把它和日期连接起来(代码的最后一部分)时,我遇到了一个很奇怪的错误(KeyError: 203591L)。奇怪的是,如果我把 v =
替换成 print
并删除那行添加语句,它就能正常工作。
我希望有人能帮我把现有的代码发展成一个解决方案(直到可以用 df.resample('1H', how={columnX: np.mean})
),或者告诉我有没有其他方法可以完成这个任务。
非常感谢!
Seb
1 个回答
0
看起来你在找这个:
In [17]: df
Out[17]:
Date Time
0 2014-05-01 60
1 2014-05-02 505
In [18]: pd.to_datetime(df['Date']) + pd.to_timedelta(df['Time'], unit='m')
Out[18]:
0 2014-05-01 01:00:00
1 2014-05-02 08:25:00
dtype: datetime64[ns]