Pandas / matplotlib没有绘制所有列数据

时间:2018-05-16 01:48:49

标签: python pandas matplotlib plot

我有一个名为'blah'的数据框,它是这样创建的:

blah = pandas.read_csv(address, index_col='Date', parse_dates=True)
blah.head()
                 TransactionName  Withdrawal  Deposit    Total
Date                                                          
2016-12-01  PTS TO:  #######           10.00      NaN  2612.27
2016-12-01  ###############           250.00      NaN  2362.27
2016-12-01  SSV TO:  ###########        1.00      NaN  2361.27
2016-12-01  ###############            62.86      NaN  2298.41
2016-12-02  SSV TO:  ###########        2.00      NaN  2296.41

我想根据日期绘制存款。 Theres~790行存款,只有57行有值,其他一切都在'NaN'。

blah['Deposit'].plot()

该命令输出此图: Crappy plot

问题是这个情节没有所有存款。如果我创建一个系列,然后删除所有NaN并绘制它,一切都很好:

derp = blah['Deposit'].dropna()
derp.plot()

在这里你可以看到所有的depoist活动。请注意2017 - 12年后的存款未显示在原件中。 Good plot

为什么不是所有的值都在第一种情况下绘制?如果我创建'blah'而不将Date设置为索引列。问题依然存在。除了不对'日期'进行绘图外,图表是根据行的索引#绘制的。

我的目标是根据日期在同一图表上绘制总计,提款和存款列。使用以下命令输出其他两列:

blah['Total'].plot() 
blah['Withdrawal'].plot()

1 个答案:

答案 0 :(得分:0)

NaN将始终中断线图:

由于NaN仍然存在于数据中,因此该行将被中断。 Pandas不知道如何通过NaN传输线,因此只能绘制连续的数值。您必须删除NaN才能让该行继续通过有效数据。如果您绘制积分,您将看到所有内容。

这是关于绘制NaN的类似但不同的问题LINK,其中答案通过NaN绘制线条来提及问题。

可重复的例子:

import random
import pandas as pd
import numpy as np

c = [np.nan] * 10
c.extend(random.sample(range(100), 10))
random.shuffle(c)

d = {"a":random.sample(range(100), 20), "b":random.sample(range(100), 20), "c":c}

df = pd.DataFrame(d)

derp.plot(style="-o") # both points and line to show all values

derp.dropna().plot()