使用Pandas和Plotly绘制起止日期图表时结束日期不显示的解决方法
解决日期范围筛选后20日数据不显示的问题
以下是针对你遇到的问题的排查和解决建议:
确认日期列类型并转换
首先检查received_at列是否为datetime类型,字符串格式的日期比较容易出现逻辑偏差。执行以下代码查看并转换:print(df['received_at'].dtype) # 查看数据类型 # 若为object类型,转换为datetime df['received_at'] = pd.to_datetime(df['received_at']) start_date = pd.to_datetime('2022-12-18') end_date = pd.to_datetime('2022-12-20')调整筛选的时间边界
如果end_date仅指定日期(默认对应当日00:00:00),<= end_date会排除20日当天所有非0点的数据。可以通过两种方式修正:# 方式1:将结束时间设为次日0点,用<进行比较 end_date = pd.to_datetime('2022-12-21') mask = (df['received_at'] >= start_date) & (df['received_at'] < end_date) # 方式2:直接指定20日的最晚时间 end_date = pd.to_datetime('2022-12-20 23:59:59') mask = (df['received_at'] >= start_date) & (df['received_at'] <= end_date)修正Kwh1列的赋值错误
你的代码中使用原数据df提取Kwh1,应该改为筛选后的df2,避免数据不匹配:df2['Kwh1'] = df2['object'].str.get('Kwh1')验证筛选结果
筛选完成后,先确认df2是否包含20日的数据:# 查看筛选后日期的最大最小值 print(df2['received_at'].min()) print(df2['received_at'].max()) # 直接查看20日的所有数据 target_date = pd.to_datetime('2022-12-20').date() print(df2[df2['received_at'].dt.date == target_date])
内容的提问来源于stack exchange,提问作者check_my_code
相关产品推荐
相关产品推荐

