创建一个包含熊猫所有日期的情节

时间:2017-07-25 12:01:44

标签: python pandas matplotlib plot

我需要创建一个包含多个列的数据框图。我将在x轴上有日期。怎么可能在一个地块上有所有日期?现在我的数据显示为每五个月一次。在某些列中,数据非常小,但对我来说非常重要的是它们在图上可见。我的数据框看起来像这样。

    date      col1        col2      col3     col4        col5        col6
20.05.2016  1091,06     12932,31       0    9343,334    23913,74      0
27.05.2016  1086,66     11845,64       0    9786,654    23913,74      0
03.06.2016  1083,04     10762,59       0    9786,654    23913,74      0
10.06.2016  1083,96     9678,630    4000    9786,654    23913,74      0
17.06.2016  1087,31     22718,40       0    9786,654    23913,74   1412
24.06.2016  1089,78     21628,62       0    9786,654    23828,96      0
01.07.2016  1083,70     20544,92       0    9749,567    23828,96      0
08.07.2016  1081,92     19463          0    9749,567    23828,96      0
...

我的代码如下所示:

df.plot(figsize=(20,10), x='date', y=['col1', 'col2', 'col3', 'col4', 'col5', 'col6'])

plt.show()

我很感激任何建议。

1 个答案:

答案 0 :(得分:3)

首先使用set_index然后如果需要子集[],则需要按名称过滤列:

cols = ['col1', 'col2', 'col3', 'col4', 'col5', 'col6']
df.set_index('date')[cols].plot(figsize=(20,10))

对于df的所有列,省略它:

df.set_index('date').plot(figsize=(20,10))

但是如果需要所有没有0的列都使用boolean indexingloc,并按ne!=)和all过滤所有列每列True个:

#replace decimals , to . and then to floats, check notice for another solution 

df['Date'] = pd.to_datetime(df['Date'])
df = df.set_index('date').replace(',', '.', regex=True).astype(float)

print (df.ne(0))
            col1  col2   col3  col4  col5   col6
date                                            
2016-05-20  True  True  False  True  True  False
2016-05-27  True  True  False  True  True  False
2016-03-06  True  True  False  True  True  False
2016-10-06  True  True   True  True  True  False
2016-06-17  True  True  False  True  True   True
2016-06-24  True  True  False  True  True  False
2016-01-07  True  True  False  True  True  False
2016-08-07  True  True  False  True  True  False

print (df.ne(0).all())
col1     True
col2     True
col3    False
col4     True
col5     True
col6    False
dtype: bool
df = df.loc[:, df.ne(0).all()]
print (df)
               col1      col2      col4      col5
date                                             
2016-05-20  1091.06  12932.31  9343.334  23913.74
2016-05-27  1086.66  11845.64  9786.654  23913.74
2016-03-06  1083.04  10762.59  9786.654  23913.74
2016-10-06  1083.96   9678.63  9786.654  23913.74
2016-06-17  1087.31  22718.40  9786.654  23913.74
2016-06-24  1089.78  21628.62  9786.654  23828.96
2016-01-07  1083.70  20544.92  9749.567  23828.96
2016-08-07  1081.92  19463.00  9749.567  23828.96


df.plot(figsize=(20,10))

<强>通知

小数也有问题,因此需要在read_csv中使用参数decimal或在上面的解决方案中使用replace astype

df = pd.read_csv('filename', index_col=['date'], decimal=',', parse_dates=['date'])

print (df)
               col1      col2  col3      col4      col5  col6
date                                                         
2016-05-20  1091.06  12932.31     0  9343.334  23913.74     0
2016-05-27  1086.66  11845.64     0  9786.654  23913.74     0
2016-03-06  1083.04  10762.59     0  9786.654  23913.74     0
2016-10-06  1083.96   9678.63  4000  9786.654  23913.74     0
2016-06-17  1087.31  22718.40     0  9786.654  23913.74  1412
2016-06-24  1089.78  21628.62     0  9786.654  23828.96     0
2016-01-07  1083.70  20544.92     0  9749.567  23828.96     0
2016-08-07  1081.92  19463.00     0  9749.567  23828.96     0