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

