pandas 中每分钟的日期直方图
Date histogram per minutes in pandas
我正在尝试使用 pandas 绘制一个简单的日期直方图(仅计算每 N 分钟出现的次数)。
然而,我所能达到的最好的是:
import pandas as pd
df = pd.read_csv('mydata.csv',sep=' ',usecols=[0,1])
df.columns = ['smdate', 'smtime']
df= pd.to_datetime(df['smtime'])
print(df)
df.groupby(df.dt.minute).count().plot(kind="bar",figsize=(50,10))
示例输出:
0 2020-07-07 00:00:07.538
1 2020-07-07 00:00:09.278
2 2020-07-07 00:00:09.292
3 2020-07-07 00:00:10.682
4 2020-07-07 00:00:14.198
...
262516 2020-07-07 15:54:44.056
262517 2020-07-07 15:54:44.270
262518 2020-07-07 15:54:44.450
262519 2020-07-07 15:54:44.697
262520 2020-07-07 15:54:45.210
Name: smtime, Length: 262521, dtype: datetime64[ns]
情节
我的问题是如何最好地分组我的帧(即按 10-20 分钟)?
还有什么是最好的方法来绘制如此多的事件,以便我可以按照上面提到的时间间隔(每 N 分钟)可视化它们?
我认为您正在寻找 pandas Grouper.
它允许您指定所需的任何频率或间隔。
这是一个间隔 10 分钟的工作示例:
import pandas as pd
df = pd.read_csv('mydata.csv',sep=';',usecols=[0,1])
df.columns = ['smdate', 'smtime']
df['smtime'] = pd.to_datetime(df['smtime'])
df.groupby(pd.Grouper(key='smtime', freq='10Min')).count().plot(kind="bar",figsize=(50,10))
在这里,我保留了初始数据帧结构;我无法让它与 datetime Series 对象一起使用(Grouper 函数尝试处理索引而不是 serie 的值)。我尝试了 axis 参数但没有成功。如果有人可以直接使用系列来改进我的答案,我会很高兴。
无效示例:
import pandas as pd
df = pd.read_csv('mydata.csv',sep=';',usecols=[0,1])
df.columns = ['smdate', 'smtime']
df = pd.to_datetime(df['smtime'])
df.groupby(pd.Grouper(freq='10Min')).count().plot(kind="bar",figsize=(50,10))
我正在尝试使用 pandas 绘制一个简单的日期直方图(仅计算每 N 分钟出现的次数)。 然而,我所能达到的最好的是:
import pandas as pd
df = pd.read_csv('mydata.csv',sep=' ',usecols=[0,1])
df.columns = ['smdate', 'smtime']
df= pd.to_datetime(df['smtime'])
print(df)
df.groupby(df.dt.minute).count().plot(kind="bar",figsize=(50,10))
示例输出:
0 2020-07-07 00:00:07.538
1 2020-07-07 00:00:09.278
2 2020-07-07 00:00:09.292
3 2020-07-07 00:00:10.682
4 2020-07-07 00:00:14.198
...
262516 2020-07-07 15:54:44.056
262517 2020-07-07 15:54:44.270
262518 2020-07-07 15:54:44.450
262519 2020-07-07 15:54:44.697
262520 2020-07-07 15:54:45.210
Name: smtime, Length: 262521, dtype: datetime64[ns]
情节
我的问题是如何最好地分组我的帧(即按 10-20 分钟)? 还有什么是最好的方法来绘制如此多的事件,以便我可以按照上面提到的时间间隔(每 N 分钟)可视化它们?
我认为您正在寻找 pandas Grouper.
它允许您指定所需的任何频率或间隔。
这是一个间隔 10 分钟的工作示例:
import pandas as pd
df = pd.read_csv('mydata.csv',sep=';',usecols=[0,1])
df.columns = ['smdate', 'smtime']
df['smtime'] = pd.to_datetime(df['smtime'])
df.groupby(pd.Grouper(key='smtime', freq='10Min')).count().plot(kind="bar",figsize=(50,10))
在这里,我保留了初始数据帧结构;我无法让它与 datetime Series 对象一起使用(Grouper 函数尝试处理索引而不是 serie 的值)。我尝试了 axis 参数但没有成功。如果有人可以直接使用系列来改进我的答案,我会很高兴。
无效示例:
import pandas as pd
df = pd.read_csv('mydata.csv',sep=';',usecols=[0,1])
df.columns = ['smdate', 'smtime']
df = pd.to_datetime(df['smtime'])
df.groupby(pd.Grouper(freq='10Min')).count().plot(kind="bar",figsize=(50,10))