【问题标题】:Min, Max, Mean Duration Time csv最小、最大、平均持续时间 csv
【发布时间】:2017-08-19 16:08:52
【问题描述】:

我正在尝试减去 CSV 中的两列以创建第三列“持续时间” 结束时间 - 开始时间

每一行也对应一个用户ID。

我可以创建一个仅包含 Duration 列的 csv 文件,但我宁愿将其重定向回原始 csv。

例如,这些时间的格式为 2016-11-12 01:25:24+00 - 2016-11-12 01:25:20+00 >

到目前为止,我已经做到了

start_stop_sessions = pd.read_csv("start_stop_sessions.csv", parse_dates
['time_x', 'time_y'])

start_stop_sessions['time_delta'] = start_stop_sessions.time_y.values -
start_stop_sessions.time_x.values

Duration = (start_stop_sessions.time_delta)
print (Duration)
sys.stdout = open('Duration.csv', 'w')

Durationlist = ("Duration.csv") 
max_value = max(Durationlist)
min_value = min(Durationlist)

我这样做对吗?

测试数据

time_x, anonymous_id, time_y

2016-11-20 18:35:57+00, 1, 2016-11-20 19:03:31+00

2016-11-21 19:33:06+, 2, 2016-11-21 19:45:47+00

2016-11-21 19:22:52+00, 3, 2016-11-21 19:26:02+00

1) 我需要创建第四列 Duration

2) 此持续时间列的 MIN、MAX、AVG 列表

【问题讨论】:

  • 你检查过this吗?

标签: python csv pandas time


【解决方案1】:

我认为您需要to_csv 将文件写入csv

df = pd.read_csv("start_stop_sessions.csv", parse_dates=['time_x','time_y'])

df['Duration'] = df['time_y'] - df['time_x']
#same as
#df['Duration'] = df['time_y'].sub(df['time_x'])
print (df)
               time_x  anonymous_id              time_y  Duration
0 2016-11-20 18:35:57             1 2016-11-20 19:03:31  00:27:34
1 2016-11-21 19:33:06             2 2016-11-21 19:45:47  00:12:41
2 2016-11-21 19:22:52             3 2016-11-21 19:26:02  00:03:10

df.to_csv('start_stop_sessions.csv', index=False)

然后得到minmaxmeanDuration - 输出是timedelta

print (df['Duration'].min())
0 days 00:03:10

print (df['Duration'].max())
0 days 00:27:34

print (df['Duration'].mean())
0 days 00:14:28.333333

如果需要将timedelta 转换为秒需要total_seconds

df['Duration'] = (df['time_y'] - df['time_x']).dt.total_seconds()
print (df)
               time_x  anonymous_id              time_y  Duration
0 2016-11-20 18:35:57             1 2016-11-20 19:03:31    1654.0
1 2016-11-21 19:33:06             2 2016-11-21 19:45:47     761.0
2 2016-11-21 19:22:52             3 2016-11-21 19:26:02     190.0

df.to_csv('start_stop_sessions.csv', index=False)

print (df['Duration'].min())
190.0
print (df['Duration'].max())
1654.0
print (df['Duration'].mean())
868.3333333333334

【讨论】:

  • 我减去第一行得到的输出是890000000000,那么使用time_delta呢?
  • 你的熊猫版本是什么? print (pd.show_versions())
  • 我认为有问题。最后一个版本是 0.19.2。可以升级吗?
  • 它有效,但有没有办法在秒 0 天 00:14:50.000000000 后结束结束
  • 如果需要在几秒钟内输出,我会添加解决方案。
猜你喜欢
  • 2021-09-25
  • 1970-01-01
  • 1970-01-01
  • 2021-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-21
  • 1970-01-01
相关资源
最近更新 更多