将列格式从秒更改为分钟

时间:2019-05-16 22:40:26

标签: python pandas

我有一个带有多列的DF,其数据以秒为单位,例如:600,我想将其转换为以下格式的00:10:00。

我找到了以下代码,并运行了一些预期能正常运行的测试,但是,我有几列想要更改格式,我正在寻找最有效的方式来运行代码而无需创建每列的功能。

先谢谢了。

def format_duration(row):
      seconds = row.Default_Misc  ## changed this
      minutes, seconds = divmod(seconds, 60)
      hours, minutes = divmod(minutes, 60)
      return '{:02d}:{:02d}:{:02d}'.format(hours, minutes, seconds)


aux['Default_Misc'] = aux.apply(format_duration, axis=1)
aux.to_csv(folder_path / 'Report.csv', index=False, encoding='UTF-8')

同样,目前,我可以将功能应用于列['Default_Misc'],但是,还有更多列需要更改格式。

3 个答案:

答案 0 :(得分:2)

df = pd.DataFrame({'Time': [600,1200,1800,2000]})

pd.to_timedelta(df['Time'], 's')

0   00:10:00
1   00:20:00
2   00:30:00
3   00:33:20

您可以将其设置为timedelta,并告诉您专栏为秒。

答案 1 :(得分:0)

尝试一下:

# sample data
np.random.seed(1)
df = pd.DataFrame({'sec': np.random.randint(200,500, 5)})

# format:
df['sec'].astype('datetime64[s]').dt.strftime("%H:%M:%S")

输出:

0    00:03:57
1    00:07:15
2    00:04:32
3    00:07:35
4    00:06:43
Name: sec, dtype: object

如果要更新数据:

df['sec'] = df['sec'].astype('datetime64[s]').dt.strftime("%H:%M:%S")

答案 2 :(得分:0)

更长,更麻烦的版本:

def timeFormat(seconds, format):
    dt = str(datetime.timedelta(seconds=seconds))
    return (datetime.datetime.strptime(dt, '%H:%M:%S')).strftime(format)

fr = pd.DataFrame({'Datetimes':[600, 1200, 3600]})
fr = fr.Datetimes.apply(timeFormat, format='%H:%M:%S')