forked from pandas-dev/pandas
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathperiod.py
144 lines (98 loc) · 3.91 KB
/
period.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
from pandas import (
DataFrame, Period, PeriodIndex, Series, date_range, period_range)
from pandas.tseries.frequencies import to_offset
class PeriodProperties(object):
params = (['M', 'min'],
['year', 'month', 'day', 'hour', 'minute', 'second',
'is_leap_year', 'quarter', 'qyear', 'week', 'daysinmonth',
'dayofweek', 'dayofyear', 'start_time', 'end_time'])
param_names = ['freq', 'attr']
def setup(self, freq, attr):
self.per = Period('2012-06-01', freq=freq)
def time_property(self, freq, attr):
getattr(self.per, attr)
class PeriodUnaryMethods(object):
params = ['M', 'min']
param_names = ['freq']
def setup(self, freq):
self.per = Period('2012-06-01', freq=freq)
def time_to_timestamp(self, freq):
self.per.to_timestamp()
def time_now(self, freq):
self.per.now(freq)
def time_asfreq(self, freq):
self.per.asfreq('A')
class PeriodConstructor(object):
params = [['D'], [True, False]]
param_names = ['freq', 'is_offset']
def setup(self, freq, is_offset):
if is_offset:
self.freq = to_offset(freq)
else:
self.freq = freq
def time_period_constructor(self, freq, is_offset):
Period('2012-06-01', freq=freq)
class PeriodIndexConstructor(object):
params = [['D'], [True, False]]
param_names = ['freq', 'is_offset']
def setup(self, freq, is_offset):
self.rng = date_range('1985', periods=1000)
self.rng2 = date_range('1985', periods=1000).to_pydatetime()
self.ints = list(range(2000, 3000))
self.daily_ints = date_range('1/1/2000', periods=1000,
freq=freq).strftime('%Y%m%d').map(int)
if is_offset:
self.freq = to_offset(freq)
else:
self.freq = freq
def time_from_date_range(self, freq, is_offset):
PeriodIndex(self.rng, freq=freq)
def time_from_pydatetime(self, freq, is_offset):
PeriodIndex(self.rng2, freq=freq)
def time_from_ints(self, freq, is_offset):
PeriodIndex(self.ints, freq=freq)
def time_from_ints_daily(self, freq, is_offset):
PeriodIndex(self.daily_ints, freq=freq)
class DataFramePeriodColumn(object):
def setup(self):
self.rng = period_range(start='1/1/1990', freq='S', periods=20000)
self.df = DataFrame(index=range(len(self.rng)))
def time_setitem_period_column(self):
self.df['col'] = self.rng
def time_set_index(self):
# GH#21582 limited by comparisons of Period objects
self.df['col2'] = self.rng
self.df.set_index('col2', append=True)
class Algorithms(object):
params = ['index', 'series']
param_names = ['typ']
def setup(self, typ):
data = [Period('2011-01', freq='M'), Period('2011-02', freq='M'),
Period('2011-03', freq='M'), Period('2011-04', freq='M')]
if typ == 'index':
self.vector = PeriodIndex(data * 1000, freq='M')
elif typ == 'series':
self.vector = Series(data * 1000)
def time_drop_duplicates(self, typ):
self.vector.drop_duplicates()
def time_value_counts(self, typ):
self.vector.value_counts()
class Indexing(object):
def setup(self):
self.index = period_range(start='1985', periods=1000, freq='D')
self.series = Series(range(1000), index=self.index)
self.period = self.index[500]
def time_get_loc(self):
self.index.get_loc(self.period)
def time_shape(self):
self.index.shape
def time_shallow_copy(self):
self.index._shallow_copy()
def time_series_loc(self):
self.series.loc[self.period]
def time_align(self):
DataFrame({'a': self.series, 'b': self.series[:500]})
def time_intersection(self):
self.index[:750].intersection(self.index[250:])
def time_unique(self):
self.index.unique()