Python 将秒显示为分和秒
我是Python新手,对如何做一些可能很琐碎的事情有点困惑 我有一个熊猫数据框,其中有一列包含以秒为单位的时间Python 将秒显示为分和秒,python,time,Python,Time,我是Python新手,对如何做一些可能很琐碎的事情有点困惑 我有一个熊猫数据框,其中有一列包含以秒为单位的时间 DF ID Call_Duration 1 127 2 153 3 23 4 87 5 96 我想将其显示为以分钟和秒为单位显示时间的新列: MM:SS 我曾尝试在熊猫中使用“时间增量”,但它显示的内容远远超出了我的需要(精确到天): 我还发现了一个可以用于单个条目的函数,但不确定如何调整它以用于dataframe列,而不是将其放入循环中 def format_duration(se
DF
ID Call_Duration
1 127
2 153
3 23
4 87
5 96
我想将其显示为以分钟和秒为单位显示时间的新列:
MM:SS
我曾尝试在熊猫中使用“时间增量”,但它显示的内容远远超出了我的需要(精确到天):
我还发现了一个可以用于单个条目的函数,但不确定如何调整它以用于dataframe列,而不是将其放入循环中
def format_duration(seconds):
minutes, seconds = divmod(seconds, 60)
hours, minutes = divmod(minutes, 60)
return '{:02d}:{:02d}:{:02d}'.format(hours, minutes, seconds)
尝试使用您的
格式\u duration
,使用dataframe.apply,指定axis=1:
编辑:我在内联代码中添加了一些注释。这应该是答案-如果没有请告诉我!要将秒转换为分和秒,请执行以下操作:
def separate(seconds):
'''This functions separates seconds into a (minutes, seconds) tuple.'''
return (
floor(seconds / 60), # devide by 60 and remove remainder
remain = seconds % 60 # take away 60 until less than 60 (modulo)
)
这并没有真正回答这个问题:“不确定如何调整它以使其适用于数据帧列,而不是将其放入循环。”也就是说,这确实是一个数据帧问题。我真的不知道。但这确实提供了原始数据,而不是显示数据。这就是我要找的。但我最终还是使用了map:calls_out['minutes']=calls_out['call_duration']。map(format_duration)很好-很高兴你把它整理好了。如果有助于达成解决方案,请接受我的回答。
def format_duration(seconds):
minutes, seconds = divmod(seconds, 60)
hours, minutes = divmod(minutes, 60)
return '{:02d}:{:02d}:{:02d}'.format(hours, minutes, seconds)
import pandas as pd
frame = pd.read_csv('test.csv')
print(frame)
def format_duration(row):
seconds = row.Call_Duration ## changed this
minutes, seconds = divmod(seconds, 60)
hours, minutes = divmod(minutes, 60)
return '{:02d}:{:02d}:{:02d}'.format(hours, minutes, seconds)
frame['duration'] = frame.apply(format_duration, axis=1)
## now frame has a new column with the desired results
print(frame)
ID Call_Duration duration
0 1 127 00:02:07
1 2 153 00:02:33
2 3 23 00:00:23
3 4 87 00:01:27
4 5 96 00:01:36
def separate(seconds):
'''This functions separates seconds into a (minutes, seconds) tuple.'''
return (
floor(seconds / 60), # devide by 60 and remove remainder
remain = seconds % 60 # take away 60 until less than 60 (modulo)
)