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

Python多指标绘图求助:添加净收益、ROE及处理ROE的'nm'值

解决多指标可视化及ROE非数值值处理问题

嘿,作为Python新手遇到这类数据处理和可视化问题太正常了,我来一步步帮你搞定:

先搞定ROE里的"nm"非数值问题

你说ROE里的"nm"没法转成数值,这是因为这类非数值字符会让pandas默认把列识别成字符串类型,我们可以从读取数据阶段就处理这个问题:

步骤1:读取数据时把"nm"标记为缺失值

用pd.read_csv(比np.loadtxt更适合处理带非数值的结构化数据),通过na_values参数直接把"nm"转换成NaN:

import pandas as pd
import matplotlib.pyplot as plt

# 替换成你的数据文件路径
df = pd.read_csv('your_revenue_data.csv', na_values='nm')

步骤2:处理缺失值并转为数值类型

接下来把ROE列转为数值,同时处理NaN值(选一种适合你数据的方式就行):

# 方式1:用前一个周期的有效值填充(适合时间序列,避免丢太多样本)
df['ROE'] = df['ROE'].ffill()

# 方式2:用均值/中位数填充
# df['ROE'] = df['ROE'].fillna(df['ROE'].median())

# 方式3:直接删去含缺失值的行(样本量足够时用)
# df = df.dropna(subset=['ROE'])

# 确保列转为数值类型
df['ROE'] = pd.to_numeric(df['ROE'], errors='coerce')

再实现同图多指标可视化(净收益+ROE)

净收益是绝对数值,ROE是百分比,量级差很大,用双Y轴展示会更清晰:

# 创建画布和左Y轴
fig, ax1 = plt.subplots(figsize=(10, 6))

# 绘制净收益(左Y轴)
color_income = 'tab:blue'
ax1.set_xlabel('时间周期')
ax1.set_ylabel('净收益', color=color_income)
# 假设你的数据里有时间列(比如'year'/'quarter')和净收益列'net_income'
ax1.plot(df['period'], df['net_income'], color=color_income, marker='o', linewidth=2, label='净收益')
ax1.tick_params(axis='y', labelcolor=color_income)
ax1.legend(loc='upper left')

# 创建右Y轴绘制ROE
ax2 = ax1.twinx()
color_roe = 'tab:red'
ax2.set_ylabel('ROE(%)', color=color_roe)
ax2.plot(df['period'], df['ROE'], color=color_roe, marker='s', linewidth=2, label='ROE')
ax2.tick_params(axis='y', labelcolor=color_roe)
ax2.legend(loc='upper right')

# 调整布局和标题
plt.title('净收益与ROE趋势对比')
fig.tight_layout()  # 防止标签重叠
plt.show()

补充:聊聊你之前遇到的np.loadtxt错误

那个ValueError大概率是两个原因:要么np.loadtxt读取到了"nm"这类非数值数据,要么你后续代码里对numpy数组做了布尔判断(比如if my_array:)——numpy数组不能直接当布尔值用,而pandas处理带非数值的表格数据灵活得多,你转用pandas真的选对了~


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:17:58