我需要创建一个包含多个列的数据框图。我将在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()
我很感激任何建议。
答案 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 indexing
和loc
,并按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