import pandas as pd
import ipywidgets as widgets
from IPython.display import display
class DateRangePicker(object):
def __init__(self,start,end,freq='D',fmt='%Y-%m-%d'):
"""
Parameters
----------
start : string or datetime-like
Left bound of the period
end : string or datetime-like
Left bound of the period
freq : string or pandas.DateOffset, default='D'
Frequency strings can have multiples, e.g. '5H'
fmt : string, defauly = '%Y-%m-%d'
Format to use to display the selected period
"""
self.date_range=pd.date_range(start=start,end=end,freq=freq)
options = [(item.strftime(fmt),item) for item in self.date_range]
self.slider_start = widgets.SelectionSlider(
description='start',
options=options,
continuous_update=False
)
self.slider_end = widgets.SelectionSlider(
description='end',
options=options,
continuous_update=False,
value=options[-1][1]
)
self.slider_start.on_trait_change(self.slider_start_changed, 'value')
self.slider_end.on_trait_change(self.slider_end_changed, 'value')
self.widget = widgets.Box(children=[self.slider_start,self.slider_end])
def slider_start_changed(self,key,value):
self.slider_end.value=max(self.slider_start.value,self.slider_end.value)
self._observe(start=self.slider_start.value,end=self.slider_end.value)
def slider_end_changed(self,key,value):
self.slider_start.value=min(self.slider_start.value,self.slider_end.value)
self._observe(start=self.slider_start.value,end=self.slider_end.value)
def display(self):
display(self.slider_start,self.slider_end)
def _observe(self,**kwargs):
if hasattr(self,'observe'):
self.observe(**kwargs)
def fct(start,end):
print start,end
名为
SelectionRangeSlider
的通用范围滑块小部件已添加到May 2017中的ipywidgets。此滑块可用于所有类型的数据,包括日期。下面的代码示例创建一个范围滑块,允许用户选择4月24日到5月24日之间的日期范围。
这个滑块可以很容易地与ipywidgets的
interact
功能结合起来。在这种情况下,小部件返回一个由选定的上下范围组成的元组。先前选定范围的两个输出:
我最近也有同样的问题。我不得不自己写一个类来做一个日期范围选择器。这是我的代码:
使用它相对简单:
享受;-)
相关问题 更多 >
编程相关推荐