在Pandas数据框中更改时间频率

8
我有一个如下的Pandas数据框DataFrame。
df
                              A           B
date_time                                    
2014-07-01 06:03:59.614000  62.1250       NaN
2014-07-01 06:03:59.692000  62.2500       NaN
2014-07-01 06:13:34.524000  62.2500  241.0625
2014-07-01 06:13:34.602000  62.2500  241.5000
2014-07-01 06:15:05.399000  62.2500  241.3750
2014-07-01 06:15:05.399000  62.2500  241.2500
2014-07-01 06:15:42.004000  62.2375  241.2500
2014-07-01 06:15:42.082000  62.2375  241.3750
2014-07-01 06:15:42.082000  62.2375  240.2500

我希望将此频率更改为常规的1分钟间隔。但是遇到以下错误:
new = df.asfreq('1Min')
>>error: cannot reindex from a duplicate axis

现在,我明白为什么会出现这种情况。因为我的时间粒度很高(以毫秒为单位),但是不规则,所以我每分钟甚至每秒钟都会得到多个读数。因此,我尝试将这些毫秒读数合并到分钟,并如下所示消除重复。

# try to convert the index to minutes and drop duplicates
df['index'] = df.index
df['minute_index']= df['index'].apply( lambda x: x.strftime('%Y-%m-%d %H:%M'))
df.drop_duplicates(cols = 'minute_index', inplace = True, take_last = True)
df_by_minute = df.set_index('minute_index')
df_by_minute
                        A                B               index
minute_index                                                     
2014-07-01 06:03    62.2500        NaN 2014-07-01 06:03:59.692000
2014-07-01 06:13    62.2500     241.50 2014-07-01 06:13:34.602000
2014-07-01 06:15    62.2375     240.25 2014-07-01 06:15:42.082000

# now change the frequency to 1 minute but I just get NaNs (!)
df_by_minute.asfreq('1Min')
                            A          B   index
2014-07-01 06:03:00        NaN        NaN   NaT
2014-07-01 06:04:00        NaN        NaN   NaT
2014-07-01 06:05:00        NaN        NaN   NaT
2014-07-01 06:06:00        NaN        NaN   NaT
2014-07-01 06:07:00        NaN        NaN   NaT
2014-07-01 06:08:00        NaN        NaN   NaT
2014-07-01 06:09:00        NaN        NaN   NaT
2014-07-01 06:10:00        NaN        NaN   NaT
2014-07-01 06:11:00        NaN        NaN   NaT
2014-07-01 06:12:00        NaN        NaN   NaT
2014-07-01 06:13:00        NaN        NaN   NaT
2014-07-01 06:14:00        NaN        NaN   NaT
2014-07-01 06:15:00        NaN        NaN   NaT

如您所见,它不起作用...有人可以帮忙吗?我想要实现的是一个返回DateTime的A或B函数,并且DateTime将以1分钟为增量。

2个回答

6

我认为,与其使用asfreq,不如使用resample来满足您的需求:

new = df.resample('T', how='mean')
< p >对于 how 选项,您还可以使用“last”或“first”。< /p >

非常令人沮丧,我完全忽略了这个函数。谢谢! - Zhubarb

1

在Pandas中更改时间频率 Dataframe的resample()函数可以将时间频率从秒变为分钟、小时、天、年等。它完美地适用于DatetimeIndex字段和datetime列。

数据集时间频率

将分钟转换为小时的时间频率

将小时转换为天的时间频率


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接