如何使用 between 将字符串值转换为 pandas 范围选择的 DateTimeIndex?
How to convert string value to DateTimeIndex for pandas range selection using between?
我有一个 pandas read excel 方法,从那里我得到一个数据框,parse_dates 参数默认为 false。对于 Dash 的可视化,开始时间和结束时间有两个下拉菜单,我需要根据下拉菜单中选择的值在此时间范围内过滤数据帧,但不知何故我被困在这里并且它给出了一个异常
"TypeError: Index must be DatetimeIndex"
df = pd.read_excel(datasource)
html.Div([
html.Label("Please select a day", style={'textAlign': "center"}),
dcc.Dropdown(
id='daydropdown',
options=[{'label': i, 'value': i} for i in dropdownDate],
multi=False
),
html.Label("Please select a start time", style={'textAlign': "center"}),
dcc.Dropdown(
id='starttimedropdown',
options=[{'label': i, 'value': i} for i in dropdownStartTime],
multi=False
),
html.Label("Please select an end time", style={'textAlign': "center"}),
dcc.Dropdown(
id='endtimedropdown',
options=[{'label': i, 'value': i} for i in dropdownEndTime],
multi=False
),
])
@app.callback(
Output('availability graph', 'figure'),
[Input('daydropdown', 'value'),
Input('starttimedropdown', 'value'),
Input('endtimedropdown', 'value'),
Input('vehicletype', 'value')]
)
def update_graph(selectedday, selectedstarttime, selectedendtime, selectedvehicletype):
# get all the parking spaces for the selected day and for the selected vehicle type
df1 = df[(df["Datum"] == selectedday) & (df["Klassifikation"] == selectedvehicletype)]
# filter parking spaces by the time range selected
start = pd.to_datetime(selectedstarttime)
end = pd.to_datetime(selectedendtime)
df2 = df1[df1['Uhrzeit'].between_time(start, end)]
我希望df2根据选择的开始和结束时间进行过滤,但是这一行抛出异常,df2 = df1[df1['Uhrzeit'].between_time(start, end)]
所选时间的格式为HH:MM:SS
您 Uhrzeit
的格式不是日期时间,而只是一个对象(它错过了日期)。即使这样格式化时间字符串 selectedstarttime
和 selectedendtime
也是可能的,因为 pandas 将今天的日期放在时间部分的前面:
pd.to_datetime('08:22:22') = Timestamp('2019-08-06 08:22:22')
如果您想使用 between_time
,请确保您正在检查的对象是日期时间对象。函数中的参数可以写成HH:MM,不必是datetime:
df2['Urhzeit'].between_time('0:15', '0:45')
我有一个 pandas read excel 方法,从那里我得到一个数据框,parse_dates 参数默认为 false。对于 Dash 的可视化,开始时间和结束时间有两个下拉菜单,我需要根据下拉菜单中选择的值在此时间范围内过滤数据帧,但不知何故我被困在这里并且它给出了一个异常
"TypeError: Index must be DatetimeIndex"
df = pd.read_excel(datasource)
html.Div([
html.Label("Please select a day", style={'textAlign': "center"}),
dcc.Dropdown(
id='daydropdown',
options=[{'label': i, 'value': i} for i in dropdownDate],
multi=False
),
html.Label("Please select a start time", style={'textAlign': "center"}),
dcc.Dropdown(
id='starttimedropdown',
options=[{'label': i, 'value': i} for i in dropdownStartTime],
multi=False
),
html.Label("Please select an end time", style={'textAlign': "center"}),
dcc.Dropdown(
id='endtimedropdown',
options=[{'label': i, 'value': i} for i in dropdownEndTime],
multi=False
),
])
@app.callback(
Output('availability graph', 'figure'),
[Input('daydropdown', 'value'),
Input('starttimedropdown', 'value'),
Input('endtimedropdown', 'value'),
Input('vehicletype', 'value')]
)
def update_graph(selectedday, selectedstarttime, selectedendtime, selectedvehicletype):
# get all the parking spaces for the selected day and for the selected vehicle type
df1 = df[(df["Datum"] == selectedday) & (df["Klassifikation"] == selectedvehicletype)]
# filter parking spaces by the time range selected
start = pd.to_datetime(selectedstarttime)
end = pd.to_datetime(selectedendtime)
df2 = df1[df1['Uhrzeit'].between_time(start, end)]
我希望df2根据选择的开始和结束时间进行过滤,但是这一行抛出异常,df2 = df1[df1['Uhrzeit'].between_time(start, end)]
所选时间的格式为HH:MM:SS
您 Uhrzeit
的格式不是日期时间,而只是一个对象(它错过了日期)。即使这样格式化时间字符串 selectedstarttime
和 selectedendtime
也是可能的,因为 pandas 将今天的日期放在时间部分的前面:
pd.to_datetime('08:22:22') = Timestamp('2019-08-06 08:22:22')
如果您想使用 between_time
,请确保您正在检查的对象是日期时间对象。函数中的参数可以写成HH:MM,不必是datetime:
df2['Urhzeit'].between_time('0:15', '0:45')