来自 CSV 的时间直方图 Pandas
Histogram of times from a CSV via Pandas
我正在分析 CSV 的比赛结果,如下所示:
Position,Time,Race #,Batch,Name,Surname,Category,Sex,Age
1,00:25:04,58,E,Luke,Schlebusch,Junior,Male,17
2,00:25:16,92,E,Anrich,Zimmermann,Junior,Male,17
3,00:26:27,147,E,Ryan,Mathaba,Open,Male,33
4,00:26:58,53,E,Daniel,Rademan,Junior,Male,16
5,00:27:17,19,E,Werner,Du Preez,Open,Male,29
6,00:27:44,148,E,Mazu,Ndandani,Open,Male,37
7,00:27:45,42,E,Dakota,Murphy,Open,Male,20
8,00:28:29,56,E,David,Schlebusch,Master,Male,51
9,00:28:32,52,E,Caleb,Rademan,Minimee,Male,12
我正在使用以下对 read_csv
的调用将其解析为 Pandas 数据帧:
race1 = pandas.read_csv('data.csv', parse_dates='Time', index_col='Time')
这使我能够非常轻松地绘制比赛时间的累积分布,只需执行以下操作:
race1.Position.plot()
Pandas 处理日期数据类型的所有复杂性,并使用正确的时间格式制作漂亮的 x 轴。
有没有一种优雅的方法可以得到同样简单的时间直方图?理想情况下,我希望能够做到 race1.index.hist()
或 race1.index.to_series().hist()
,但我知道那行不通。
我已经能够将时间强制为 timedelta
并通过
获得了工作结果
times = race1.index.to_series()
((times - times[0]).dt.seconds/60).hist()
这会生成正确形状的直方图,但显然 x 值错误(它们在最快的时间内关闭)。
有没有一种优雅的方法可以从一开始就将列读取为时间增量,有没有更好的方法来创建直方图,包括适当的刻度?此处正确的勾号意味着他们使用 correct locator 并正确更新。
这似乎工作得很好,但如果它没有通过有关序号日期的 Matplotlib 日期细节,我会更高兴。
times = race1.index.to_series()
today = pandas.Timestamp('00:00:00')
timedelta = times - today
times_ordinal = timedelta.dt.seconds/(24*60*60) + today.toordinal()
ax = times_ordinal.hist()
ax.xaxis_date()
plt.gcf().autofmt_xdate()
plt.ylabel('Number of finishers')
我正在分析 CSV 的比赛结果,如下所示:
Position,Time,Race #,Batch,Name,Surname,Category,Sex,Age
1,00:25:04,58,E,Luke,Schlebusch,Junior,Male,17
2,00:25:16,92,E,Anrich,Zimmermann,Junior,Male,17
3,00:26:27,147,E,Ryan,Mathaba,Open,Male,33
4,00:26:58,53,E,Daniel,Rademan,Junior,Male,16
5,00:27:17,19,E,Werner,Du Preez,Open,Male,29
6,00:27:44,148,E,Mazu,Ndandani,Open,Male,37
7,00:27:45,42,E,Dakota,Murphy,Open,Male,20
8,00:28:29,56,E,David,Schlebusch,Master,Male,51
9,00:28:32,52,E,Caleb,Rademan,Minimee,Male,12
我正在使用以下对 read_csv
的调用将其解析为 Pandas 数据帧:
race1 = pandas.read_csv('data.csv', parse_dates='Time', index_col='Time')
这使我能够非常轻松地绘制比赛时间的累积分布,只需执行以下操作:
race1.Position.plot()
Pandas 处理日期数据类型的所有复杂性,并使用正确的时间格式制作漂亮的 x 轴。
有没有一种优雅的方法可以得到同样简单的时间直方图?理想情况下,我希望能够做到 race1.index.hist()
或 race1.index.to_series().hist()
,但我知道那行不通。
我已经能够将时间强制为 timedelta
并通过
times = race1.index.to_series()
((times - times[0]).dt.seconds/60).hist()
这会生成正确形状的直方图,但显然 x 值错误(它们在最快的时间内关闭)。
有没有一种优雅的方法可以从一开始就将列读取为时间增量,有没有更好的方法来创建直方图,包括适当的刻度?此处正确的勾号意味着他们使用 correct locator 并正确更新。
这似乎工作得很好,但如果它没有通过有关序号日期的 Matplotlib 日期细节,我会更高兴。
times = race1.index.to_series()
today = pandas.Timestamp('00:00:00')
timedelta = times - today
times_ordinal = timedelta.dt.seconds/(24*60*60) + today.toordinal()
ax = times_ordinal.hist()
ax.xaxis_date()
plt.gcf().autofmt_xdate()
plt.ylabel('Number of finishers')