【问题标题】:Pandas/matplotlib isn't plotting all column dataPandas/matplotlib 没有绘制所有列数据
【发布时间】:2018-10-25 22:42:03
【问题描述】:

我有一个名为“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

我想针对日期绘制存款。有大约 790 行的存款,只有 57 行有值,其他的都在 'NaN' 中。

blah['Deposit'].plot()

该命令输出此图: Crappy plot

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

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

在这里你可以看到所有的存款活动。请注意 2017-12 之后未出现在原始版本中的存款。 Good plot

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

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

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

【问题讨论】:

    标签: python pandas matplotlib plot


    【解决方案1】:

    NaN 总是会打断线图:

    由于数据中仍然存在NaN,所以行将被中断。 Pandas 不知道如何通过 NaN 传递线,因此只能绘制连续的数值。您必须删除 NaN 才能使该行一直通过有效数据。如果你绘制点,你会看到一切。

    这是一个LINK 与关于绘制 NaN 的类似但不同的问题,其中答案提到了通过 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)
    
    df.plot(style="-o") # both points and line to show all values
    
    df.dropna().plot()
    

    【讨论】:

      猜你喜欢
      • 2019-11-05
      • 2016-06-29
      • 2019-08-29
      • 2017-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多