Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 当以秒为单位获取大量数据以达到平均值、最大值和最小值时,如何转换为日期时间格式?_Python 3.x_Pandas_Datetime_Formatting - Fatal编程技术网

Python 3.x 当以秒为单位获取大量数据以达到平均值、最大值和最小值时,如何转换为日期时间格式?

Python 3.x 当以秒为单位获取大量数据以达到平均值、最大值和最小值时,如何转换为日期时间格式?,python-3.x,pandas,datetime,formatting,Python 3.x,Pandas,Datetime,Formatting,我使用下面的python命令,得到一个结果,我不知道如何准确地转换为小时或任何其他时间标准。我的目标是了解两个学生组登录行为的平均值、最小值和最大值,并统计每个组中每个学生的所有登录次数,直到截止日期 数据(col2)-从学生结束大学入学日期减去每个学生的不同登录时间的结果(col2中带负号的数字表示截止日期后没有登录): 这是我正在使用的代码 result = result.groupby('col1').agg({'col2': ['mean', 'min', 'max']}) print

我使用下面的python命令,得到一个结果,我不知道如何准确地转换为小时或任何其他时间标准。我的目标是了解两个学生组登录行为的平均值、最小值和最大值,并统计每个组中每个学生的所有登录次数,直到截止日期

数据(col2)-从学生结束大学入学日期减去每个学生的不同登录时间的结果(col2中带负号的数字表示截止日期后没有登录):

这是我正在使用的代码

result = result.groupby('col1').agg({'col2': ['mean', 'min', 'max']})

print("\nMean, min, and max values of student line logons - indifinite")
print(result)

print("\nresult.columns")
print(result.columns)
这就是我得到的结果

Mean, min, and max values of student line logons
               time_diff                            
                    mean           min           max
Col1                                          
Bachelor   -8.089769e+12 -1.872721e+13 -3.622951e+10
Diploming  -8.718830e+12 -1.586661e+13 -1.426230e+10
我如何才能从“学生行登录的平均值、最小值和最大值”中获得有意义的结果,可能会在上面的“数据(col2)”中显示类似col2的结果?任何来自外界的明智建议都是值得赞赏的。。。;o) 谢谢。

用于将时间增量转换为秒,聚合并在必要时将秒转换为时间增量:

result['Col2'] = result['Col2'].dt.total_seconds()
result = (result.groupby('Col1')['Col2'].agg(['mean', 'min', 'max'])
                .apply(pd.to_timedelta, unit='s'))
print (result)
                         mean                 min                 max
Col1                                                                 
Bachelor  -133 days +04:53:12 -154 days +13:38:00 -103 days +20:23:00
Diploming  -94 days +07:32:12 -142 days +15:10:00  -62 days +00:31:00
编辑:对于绘图,最好使用:

result['Col2'] = result['Col2'].dt.total_seconds()
result1 = result.groupby('Col1')['Col2'].agg(['mean', 'min', 'max'])
如果希望通过
0
替换缺少的值来避免错误,请使用:

result['Col2'] = result['Col2'].dt.total_seconds()
result2 = (result.groupby('Col1')['Col2'].agg(['mean', 'min', 'max'])
                .apply(pd.to_timedelta, unit='s')
                .fillna(pd.Timedelta(0))

                
用于将时间增量转换为秒,聚合,如有必要,将秒转换为时间增量:

result['Col2'] = result['Col2'].dt.total_seconds()
result = (result.groupby('Col1')['Col2'].agg(['mean', 'min', 'max'])
                .apply(pd.to_timedelta, unit='s'))
print (result)
                         mean                 min                 max
Col1                                                                 
Bachelor  -133 days +04:53:12 -154 days +13:38:00 -103 days +20:23:00
Diploming  -94 days +07:32:12 -142 days +15:10:00  -62 days +00:31:00
编辑:对于绘图,最好使用:

result['Col2'] = result['Col2'].dt.total_seconds()
result1 = result.groupby('Col1')['Col2'].agg(['mean', 'min', 'max'])
如果希望通过
0
替换缺少的值来避免错误,请使用:

result['Col2'] = result['Col2'].dt.total_seconds()
result2 = (result.groupby('Col1')['Col2'].agg(['mean', 'min', 'max'])
                .apply(pd.to_timedelta, unit='s')
                .fillna(pd.Timedelta(0))

                

您好,jezrael,您能否帮助我演示如何可视化解决方案,即我在尝试应用matplotlib时出错。它的说明如下:TypeError:不再支持为timedelta64[ns]dtype向fillna传递整数。要获得旧的行为,请传递pd.Timedelta(seconds=n)。用于获取此错误消息的代码是:导入matplotlib.pyplot作为plt plt.style.use('ggplot')ax=result.plot(kind='bar',title='title',figsize=(15,10),legend=True,fontsize=20)ax.setxlabel(“Line”,fontsize=15)ax.setylabel(“登录次数”,fontsize=15)plt.show()@Hubsandspokes我认为最好的方法是使用我的解决方案而不转换回timeltas,所以只使用
result.groupby('Col1')['Col2'].agg(['mean','min','max'])
。您的错误应该通过
.fillna(pd.Timedelta(0))
嗨,jezrael,我可以请您更具体一点吗?-首先,按照您最初的解决方案,一切都很顺利,我得到了Col1和Col2的天数等回复。第二,我想“回风”以便能够形象化,但我从你的建议中得到了错误。因此,在阅读您的行“…您的错误应该由.fillna(pd.Timedelta(0))解决”时,我有点困惑。您是否有可能提供完整的代码,这是您的第一个答案Thx,非常提前,BRHubsandspokes@Hubsandspokes-答案被编辑了,我希望现在它更清楚了。这次尝试将下面的numpy代码转换为与第一次相同的天、小时、分钟、秒…X=登录次数\u所有值split=round(len(X)/2)X1,X2=X[0:split],X[split:]mean1,mean2=X1.mean(),X2.mean()var1,var2=X1.var(),X2.var()打印('mean1=%f,mean2=%f%%(mean1,mean2))打印('variance1=%f,variance2=%f%%(var1,var2))我得到的结果是:平均值1=60785.792548,平均值2=61291.266868方差1=7483553053.651829,方差2=7603208729.348722。希望得到与上次相同的结果。我把np.array放在一个.to_numpy dataframe.hmm中,仍然得到60785.7925等等。嗨,jezrael,你能帮助我演示如何可视化解决方案吗,也就是说,我在尝试应用时遇到了一个错误g matplotlib。它的说明如下:类型错误:不再支持为timedelta64[ns]数据类型向fillna传递整数。若要获取旧行为,请改为传递
pd.Timedelta(seconds=n)
。用于获取此错误消息的代码是:将matplotlib.pyplot作为plt plt.style导入。使用('ggplot')ax=result.plot(kind='bar',title=“Title”,figsize=(15,10),legend=True,fontsize=20)ax.setxlabel(“Line”,fontsize=15)ax.setylabel(“登录次数”,fontsize=15)plt.show()@Hubsandspokes我认为最好的方法是使用我的解决方案而不转换回timeltas,所以只使用
result.groupby('Col1')['Col2'].agg(['mean','min','max'))
。您的错误应通过
.fillna(pd.Timedelta(0))解决
Hi jezrael,我可以请你说得更具体一点吗?-首先,按照你最初的解决方案,一切都很好,我得到了Col1和Col2的天数等回复。其次,我想“回退”以便能够可视化,但我从你的建议中得到了错误。因此,读你的台词时我有点困惑,“…你的错误应该是”ld由.fillna(pd.Timedelta(0))求解…你有可能提供完整的代码吗?这是你的第一个答案吗?-Thx,非常,提前,BRHubsandspokes@Hubsandspokes-答案已编辑,我希望现在更清楚。这次尝试将下面的numpy代码转换为与第一次相同的天、小时、分钟、秒…X=登录次数\u所有值拆分=四舍五入(len(X)/2)X1,X2=X[0:split],X[split:]mean1,mean2=X1.mean(),X2.mean()var1,var2=X1.var(),X2.var()打印('mean1=%f,mean2=%f%%(mean1,mean2)]打印('variance1=%f,variance2=%f%%(var1,var2))我得到了这样的结果:平均值1=60785.792548,平均值2=61291.266868,方差1=7483553053.651829,方差2=7603208729.348722。希望得到和上次相同的结果。我把np.array放在一个.to_numpy dataframe.hmm中,仍然得到60785.7925,依此类推