我有一个缺少很多值的数据框,如下所示:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
date = pd.date_range(start='2003/01/01', end='2005/12/31')
df = pd.DataFrame({'date':date, })
将缺少的值分配给列:
df = pd.DataFrame(np.nan, index=date, columns=['A', 'B'])
在整个过程中添加一些实际值,以说明我的数据的实际外观
df.loc['2003-01-10', 'B'] = 50
df.loc['2003-01-15', 'A'] = 70
df.loc['2003-06-10', 'B'] = 45
df.loc['2003-07-15', 'A'] = 55
df.loc['2004-01-01', 'B'] = 20
df.loc['2004-01-05', 'A'] = 30
df.loc['2004-05-01', 'B'] = 25
df.loc['2004-06-05', 'A'] = 35
df.loc['2005-01-01', 'B'] = 40
df.loc['2005-01-05', 'A'] = 35
绘制数据
df.plot(style = '-o')
此图如下:
因此您可以看到我已经使用style = '-o'
命令将其指定为折线图,并且可以正确显示在图例中,但是点在图形上并未被折线连接。当我在没有style
规范的情况下进行绘制时,会得到一个空白图形。
任何帮助将不胜感激。谢谢。
答案 0 :(得分:3)
我认为这是由于您数据集中的NaN引起的。您的数据根本不整洁。我以为大熊猫可以只使用堆栈就可以解决这个问题,但它也不起作用。另外,有点不方便的是,对于特定日期,没有同时定义两个值(也许可以在此处使用内插。但是,有效的方法很简单:
df['A'].dropna().plot()
df['B'].dropna().plot()
在单个Jupiter笔记本电池中。这两个图都将绘制到同一轴线上。
插值有效,但由于缩放而看起来有些不同:
pd.concat([df['A'].interpolate(),
df['B'].interpolate()], axis=1).plot()
请注意,此处直接创建图例。我太懒了,无法覆盖旧的df。
微调插值并意识到它已经是一种DataFrame方法,也可以做到:
df.interpolate(limit_area='inside').plot()
定性地显示drop_na结果或
df.interpolate(limit_area='inside').plot()
显示连续结果。
答案 1 :(得分:2)
您的数据框中有很多NaN
值,因此它不能画一条线(实际点彼此不跟随)。
您可以做的是像这样删除nan值:
df.B.dropna().plot()
df.A.dropna().plot()