You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从YYYY-YY格式CSV列提取年份用于Pandas+Bokeh绘图

问题原因

你遇到的空白图表问题本质是pandas默认的日期解析逻辑无法识别YYYY-YY格式的财年字符串,读取后Year/Ports列仍为文本类型,无法匹配Bokeh图表的datetime类型X轴,因此无法渲染折线。

你不需要手动提取YYYY部分,有两种更合理的自动化处理方案:


方案1:转换为标准 datetime 类型(推荐,适配时间轴缩放、排序需求)

可以自定义财年转日期的逻辑,不需要修改原始CSV文件,处理代码如下:
首先新增财年解析函数,将YYYY-YY转换为标准日期(可根据实际业务规则选择财年起始/结束日期,以下示例默认采用印度财年规则,以每年4月1日作为财年起始点):

import pandas as pd
from bokeh.plotting import figure,show
from bokeh.io import output_file
from bokeh.models import FuncTickFormatter

def parse_fiscal_year(fy_str):
    # 提取财年起始年份
    start_year = int(fy_str.split('-')[0])
    # 可根据需求调整为财年结束日期,比如f"{start_year+1}-03-31"
    return pd.to_datetime(f"{start_year}-04-01")

# 读取CSV后手动处理日期列
df = pd.read_csv("Cargo_Data_full.csv")
df['Year/Ports'] = df['Year/Ports'].apply(parse_fiscal_year)

output_file("Cargo tracker.html")
f = figure(height=200,sizing_mode = 'scale_width',x_axis_type = 'datetime')
f.title.text = "Cargo Tracker"
f.xaxis.axis_label="Year/Ports"
f.yaxis.axis_label="Cargo handled"

# 自定义X轴刻度显示,将日期转换回原有的YYYY-YY格式
f.xaxis.formatter = FuncTickFormatter(code="""
    const date = new Date(tick);
    const year = date.getFullYear();
    return `${year}-${(year+1).toString().slice(-2)}`;
""")

f.line(df['Year/Ports'],df['OTHERS'])
show(f)

该方案保留了时间轴的连续性,支持缩放、筛选等交互操作,同时X轴显示和原始数据一致的财年格式。


方案2:使用分类X轴(适合不需要时间间隔计算的固定序列场景)

如果不需要按时间间隔做计算或缩放,也可以直接把财年字符串设为有序分类,不需要转日期:

import pandas as pd
from bokeh.plotting import figure,show
from bokeh.io import output_file

df = pd.read_csv("Cargo_Data_full.csv")
# 将财年列设为有序分类,保证顺序和原始CSV一致
df['Year/Ports'] = pd.Categorical(df['Year/Ports'], ordered=True)

output_file("Cargo tracker.html")
# 不需要指定x_axis_type为datetime,通过x_range指定分类顺序
f = figure(height=200,sizing_mode = 'scale_width', x_range=df['Year/Ports'])
f.title.text = "Cargo Tracker"
f.xaxis.axis_label="Year/Ports"
f.yaxis.axis_label="Cargo handled"

f.line(df['Year/Ports'],df['OTHERS'])
show(f)

内容的提问来源于stack exchange,提问作者Harshad Karekar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 05:24:02