我有一个带有多列的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'],但是,还有更多列需要更改格式。
答案 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')