2017-01-16 200 views
-1

让我们考虑以下数据框:Python中,熊猫,转换时间戳期

date_range = pd.date_range(dt(2010,1,1), dt(2010,1,31), freq='1D') 
df = pd.DataFrame(data = np.random.rand(len(date_range),2), index = date_range) 

如果我组第1周期间的数据点和可视化组的定义,我得到:

In: [1]:df.groupby(pd.TimeGrouper('W')).groups 
Out:[1]: 
    {Timestamp('2010-01-03 00:00:00', freq='W-SUN'): 3, 
    Timestamp('2010-01-10 00:00:00', freq='W-SUN'): 10, 
    Timestamp('2010-01-17 00:00:00', freq='W-SUN'): 17, 
    Timestamp('2010-01-24 00:00:00', freq='W-SUN'): 24, 
    Timestamp('2010-01-31 00:00:00', freq='W-SUN'): 31} 

我检索该字典的键:

In: [2]: list(df.groupby(pd.TimeGrouper('W')).keys()) 
Out:[2]: 
    [Timestamp('2010-01-03 00:00:00', freq='W-SUN'), 
    Timestamp('2010-01-10 00:00:00', freq='W-SUN'), 
    Timestamp('2010-01-31 00:00:00', freq='W-SUN'), 
    Timestamp('2010-01-17 00:00:00', freq='W-SUN'), 
    Timestamp('2010-01-24 00:00:00', freq='W-SUN')] 

但是,我留下了那些有趣的变量,如Timestamp('2010-01-24 00:00:00', freq='W-SUN')它的前缀为Timestamp,但其结构与期间类似。如何将这些值转换为实际期间?

回答

1

您可以使用:

a = df.groupby(pd.TimeGrouper('W')).groups 
per = [pd.Period(x, freq=x.freq) for x in a] 
print (per) 
[Period('2010-01-18/2010-01-24', 'W-SUN'), 
Period('2010-01-04/2010-01-10', 'W-SUN'), 
Period('2010-01-25/2010-01-31', 'W-SUN'), 
Period('2010-01-11/2010-01-17', 'W-SUN'), 
Period('2009-12-28/2010-01-03', 'W-SUN')] 
+1

不过是变量'时间戳( '2010-01-03 00:00:00',频率= 'W-SUN')'正确的一个或一个错误?为什么时间戳会附带频率值? – Radar

+0

我认为这是正确的。但我不知道我是否知道很好解释它。但是,如果频率发生变化,则会添加fteq。 – jezrael