我有一个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。
提前致谢。我是新人,请帮忙。
答案 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()