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

Pandas/matplotlib未绘制Deposit列全部数据问题求助

原因分析与解决方案

这个问题的核心在于pandas/matplotlib处理包含大量NaN的Series时的默认绘图行为,以及NaN对折线图的影响:

为什么直接plot Deposit列看不到全部数据?

当你执行blah['Deposit'].plot()时,pandas会保留所有Date索引的行——包括那些Deposit值为NaN的行。而matplotlib默认的折线图会在遇到NaN时中断折线,并且因为你的Deposit列只有57个有效值,其余700+行都是NaN,这些有效数据点会被分散在整个日期范围内的大量空白区域中。要么折线被频繁断开导致视觉上难以分辨所有点,要么因为x轴跨度太大,有效点被“稀释”得几乎看不见,让你误以为没有显示全所有存款记录。

而当你用dropna()后,只保留了有Deposit值的行,绘图时x轴上只显示这些有效记录对应的日期,所有数据点都会被集中展示,自然能看到全部存款记录。

如何将Total、Withdrawal和Deposit同图绘制?

既然Total和Withdrawal列数据完整(无大量NaN),可以用折线图展示,而Deposit适合用散点图或者只连接有效点的折线图,这样能在同一图中清晰区分三者。这里提供两种可行的方法:

方法1:分别绘制各列,对Deposit只保留有效数据

import matplotlib.pyplot as plt

# 创建绘图对象
fig, ax = plt.subplots(figsize=(10, 6))

# 绘制Total和Withdrawal的折线图
blah['Total'].plot(ax=ax, color='blue', label='Total Balance')
blah['Withdrawal'].plot(ax=ax, color='red', label='Withdrawals')

# 绘制Deposit的散点图(用圆点标记更醒目)
blah['Deposit'].dropna().plot(ax=ax, style='o', color='green', label='Deposits')

# 添加图例和标签
ax.set_xlabel('Date')
ax.set_ylabel('Amount')
ax.legend()
plt.show()

方法2:直接同图绘制,给Deposit指定散点样式

如果你不想单独处理Deposit的NaN,可以直接在同图绘制时给Deposit指定散点样式,这样matplotlib只会绘制非NaN的点:

blah[['Total', 'Withdrawal', 'Deposit']].plot(figsize=(10, 6), style=['-', '-', 'o'])
plt.legend(['Total Balance', 'Withdrawals', 'Deposits'])
plt.show()

这两种方法都能让你在同一日期轴上清晰看到Total的整体趋势、Withdrawal的支出记录,以及Deposit的所有存款记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:52:35