如何用不完整的数据集创建5分钟间隔的日期时间索引(Python)

1 投票
1 回答
1514 浏览
提问于 2025-04-18 10:37

这是我第一次在这里发帖,希望能有所收获 :)

简单来说,我有一个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]

撰写回答