使用python将时间戳显示为On关闭

时间:2017-10-04 18:56:25

标签: python matplotlib timestamp

我有一个Excel,它有10秒频繁的数据和时间戳,我希望在哪里有10Sec的频率数据,它应该显示为On(1)并且频率时间戳不匹配的地方它应该显示为OFF(0 )如剧情。

示例数据:

timestamp
1/6/2017 0:00:10
1/6/2017 0:00:20
1/6/2017 0:00:40
1/6/2017 0:00:50
1/6/2017 0:01:00

所以,

timestamp
    1/6/2017 0:00:39 timestamp is there ON
    1/6/2017 0:00:49 timestamp is not there Off
    1/6/2017 0:00:59 timestamp is there ON
    1/6/2017 0:01:09 timestamp is not there Off
    1/6/2017 0:01:19 timestamp is there ON
    1/6/2017 0:01:29 timestamp is there ON
    1/6/2017 0:01:39 timestamp is there ON

代码:下面是我的代码;在此我要绘制图表。

import matplotlib.pyplot as plt
import pandas as pd
import matplotlib
matplotlib.style.use('ggplot')
#reading CSv
df = pd.read_csv('test.csv', parse_dates=['timestamp'])
print (df)


#set Index
df['timestamp'] = pd.to_datetime(df['timestamp'])
df = df.set_index('timestamp')
print (df)


#reindexing   
df.reindex(pd.date_range(start=df.index[0], end=df.index[-1], freq='30s'))

此On Off应该出现在On表示up和Off表示Down。

提前致谢。我是新人,请帮忙。

1 个答案:

答案 0 :(得分:1)

你非常接近。这里的要点是DataFrame中只有一列,如果将此列设置为索引df.set_index('timestamp'),则不会显示任何数据。因此,您首先要创建另一个具有“on”值(或1 s)的列,然后重新索引数据帧。使用fill_values可以将新创建​​的日期设置为0。 最后只需plot数据。

u = u"""timestamp
1/6/2017 0:00:10
1/6/2017 0:00:20
1/6/2017 0:00:40
1/6/2017 0:00:50
1/6/2017 0:01:00
1/6/2017 0:01:30
"""

import io
import pandas as pd
import matplotlib.pyplot as plt
plt.style.use('ggplot')

#reading CSv
df = pd.read_csv(io.StringIO(u), parse_dates=['timestamp'])
# create new column of `1`s
df["On"] = [1]*len(df)

df['timestamp'] = pd.to_datetime(df['timestamp'])
df = df.set_index('timestamp')

df = df.reindex(pd.date_range(start=df.index[0], end=df.index[-1], freq='10s'), 
                fill_value=0)

df.plot()

plt.show()

enter image description here