尝试在 pandas 数据帧中将时间从 30:30 转换为 30.5

Trying to convert time from 30:30 to 30.5 in a pandas dataframe

我正在尝试将我在 netflix 节目中观看的时间转换为浮点数,以便我可以将其加总。我不知道如何转换它。我尝试了很多方法,包括:

temp['Minutes'] = temp['Duration'].apply(lambda x: float(x))
Error: ValueError: could not convert string to float: '00:54:45'
2022-05-18 05:21:42 00:54:45 NaN Ozark: Season 4: Mud (Episode 13) NaN Amazon FTVET31DOVI2020 Smart TV00:54:50 00:54:50 US (United States) Wednesday 2022-05-18

我相信您要做的是将 54 之后的秒数转换为 60 之前的时间百分比。假设您的数据是一致的,这应该会为您提供正在寻找的答案

data = {
    'time' : ['00:54:45', '00:05:15', '01:32:00', '00:28:00']
}

df = pd.DataFrame(data)
df['time'] = df['time'].apply(lambda x : ''.join(x.split(':', 1)[1:]))
df['percent'] = df['time'].apply(lambda x : x.split(':')[1])
df['percent'] = (df['percent'].astype(int) / 60) * 100
df['percent'] = df['percent'].astype(int)
df['final'] = df['time'].apply(lambda x : str(x).split(':')[0]) + '.' + df['percent'].astype(str)
df

如果您的目标是将包含字符串的 pd.Series 转换为可以汇总的数据类型,那么使用 pd.Timedeltas 可能会有所帮助。

示例数据:

import pandas as pd
durations = {"Duration": ['00:54:45', '00:05:15', '01:32:00', '00:28:00']}
temp = pd.DataFrame(durations)

将字符串转换为 Timedelta 对象:

time_deltas = pd.to_timedelta(temp["Duration"])

然后可以把time_deltaspd.Series加起来再换算成分钟:

minutes = time_deltas.sum().total_seconds() / 60
minutes  # 180.0

如果您想将时间增量添加到现有的 DataFrame 中:

temp["time_deltas"] = pd.to_timedelta(temp["Duration"])
minutes = temp["time_deltas"].sum().total_seconds() / 60