如何在Plotly的瀑布图中正确添加总计数值列
Plotly瀑布图总计列异常问题解决方法
问题原因
有两个核心错误导致总计列识别失败:
- 源数据的
deal value (USD)列带$符号和.千分位分隔符,读入后为字符串类型,Plotly无法识别为数值做累加计算 - 源数据
Measure列的Total值末尾带多余空格,无法和Plotly要求的总计标识匹配,被识别为普通相对值项
调整后代码
import pandas as pd import plotly.graph_objs as go df = pd.read_excel('C:/Users/Usuario/Desktop/python/HP/waterfall.xlsx') # 清洗金额列:去除货币符号、千分位符,转成数值类型 df['deal value (USD)'] = df['deal value (USD)'].str.replace('$', '', regex=False)\ .str.replace('.', '', regex=False)\ .astype(int) # 清洗Measure列:去除首尾空格、统一小写,避免匹配异常 df['Measure'] = df['Measure'].str.strip().str.lower() x = df['DealID'] y = df['deal value (USD)'] measure = df['Measure'] # 格式化展示文本,和原数据的美元+点千分位格式保持一致 text = '$' + df['deal value (USD)'].apply(lambda num: f"{num:,}".replace(',', '.')) fig = go.Figure(go.Waterfall( measure=measure, x=x, y=y, text=text, textposition="outside" # 可选配置:数值标签放在柱子外侧更清晰 )) # 可选布局调整 fig.update_layout( title="西门子季度交易金额统计", yaxis_title="交易金额(USD)" ) fig.show()
补充说明
- 可执行
print(df['Measure'].unique())检查清洗后的数据是否包含total标识,执行print(df['deal value (USD)'].dtype)确认金额列已转为数值类型 - 如果修改源数据直接将金额列存为纯数值、Measure列的总计项改为无空格的
total,可省去代码里的清洗步骤
内容的提问来源于stack exchange,提问作者daniel.hillow
相关产品推荐
相关产品推荐

