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
相关产品推荐
相关产品推荐

