Pyecharts可视化显示Pandas数据时为空值的解决方法:用lambda函数批量修改pandas数据类型

我有一个应用,需要使用pandas去mysql数据库里用pd. read_sql方法读取数据,进行一定处理后通过数据可视化组件Pyecharts在网页上进行可视化展示,图形为折线图,在显示时发现有些系列(series)的值不显示,查看pyecharts网页端的JavaScript脚本代码,发现Series的值都显示为null,后来查了资料,发现是pandas的数值类型有些跟pyecharts不兼容,pyecharts官网是这么说的:

Note: 在使用 Pandas&Numpy 时,请确保将数值类型转换为 python 原生的 int/float。比如整数类型请确保为 int,而不是 numpy.int32

在网上查了很多资料,比如直接使用df.astype(‘int’)对整个数据表进行转换,或者编写自定义函数然后调用df.apply()方法,都是报错,因为我的pandas原始数据里面有int,object等不同的数据类型,不能直接转换。后来就弄了一个for循环,循环每1行,然后对每一行使用.apply()方法调用lambda函数进行转换,数据就正常显示,虽然用循环感觉比较笨,但还是开心,解决了问题。毕竟现在电脑配置那么高,不太需要考虑程序效率,能把问题解决就行了。

核心代码如下:

#从数据库读取数据
df=pd.read_sql(sql=sql,con=conn,index_col="日期",coerce_float=False)
#折线图
line = Line(init_opts=opts.InitOpts(width="1200px",height = "600px"))
line.add_xaxis(df.columns.tolist())        #一定要加tolist()方法,不然会没有任何内容。

#设置Y轴反转,X轴朝下,不用对其零值
yaxis_opts=opts.AxisOpts(is_inverse= True,is_show=True,axisline_opts=opts.AxisLineOpts(is_on_zero=False)))

for i in range(0,df.shape[0],1):            #轮循df里的所有行,添加到折线图。
  series_name = df.iloc[i].name   #系列名称
  y_axis_value=df.iloc[i].apply(lambda x: x.astype('float') if x is not None else x)    #这里把所有非空值强行转换为float
  line.add_yaxis(series_name=series_name, y_axis=y_axis_value,label_opts=opts.LabelOpts(is_show=True),
        linestyle_opts=opts.LineStyleOpts(width=2),)
        #添加Y轴数据
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值