forked from pandas-dev/pandas
-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathperiod.py
135 lines (88 loc) · 3.47 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
from pandas import (DataFrame, Series, Period, PeriodIndex, date_range,
period_range)
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 PeriodIndexConstructor(object):
goal_time = 0.2
params = ['D']
param_names = ['freq']
def setup(self, freq):
self.rng = date_range('1985', periods=1000)
self.rng2 = date_range('1985', periods=1000).to_pydatetime()
def time_from_date_range(self, freq):
PeriodIndex(self.rng, freq=freq)
def time_from_pydatetime(self, freq):
PeriodIndex(self.rng2, freq=freq)
class DataFramePeriodColumn(object):
goal_time = 0.2
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):
goal_time = 0.2
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):
goal_time = 0.2
pi_with_nas = PeriodIndex(['1985Q1', 'NaT', '1985Q2'] * 1000, freq='Q')
pi_diff = PeriodIndex(['1985Q1', 'NaT', '1985Q3'] * 1000, freq='Q')
def setup(self):
self.index = PeriodIndex(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()
def time_dropna(self):
self.pi_with_nas.dropna()
def time_difference(self):
self.pi_with_nas.difference(self.pi_diff)
def time_symmetric_difference(self):
self.pi_with_nas.symmetric_difference(self.pi_diff)