pandas 如何将'YYYY-mm-dd HH:MM:SS.[]'转换为日期中的分钟数?

fquxozlt  于 2023-04-04  发布在  其他
关注(0)|答案(2)|浏览(142)

我有一个 Dataframe df,其列date的格式为'YYYY-mm-dd HH:MM:SS.miliseconds'(datetime 64 [ns])。我想生成另一列minutes(float),作为从时间00:00:00到时间HH:MM:SS的分钟数。如何操作?

yhived7q

yhived7q1#

你可以很容易地转换成任何时间单位自午夜

  • 从日期时间中减去日期以得到时间增量(持续时间),
  • 然后将时间增量转换为所需的单位;

例如:

import pandas as pd

df = pd.DataFrame({"datetime": ["2016-01-01 00:00:00",
                                "2016-03-01 12:00:00",
                                "2016-06-01 23:59:00"]})

df["datetime"] = pd.to_datetime(df["datetime"])

# subtract the datetime floored to the day to get a timedelta,
df["minutes_from_midnight"] = (
    (df["datetime"] - df["datetime"].dt.floor("d"))
    .dt.total_seconds() # then convert to minutes
    .div(60)
)

df
             datetime  minutes_from_midnight
0 2016-01-01 00:00:00                    0.0
1 2016-03-01 12:00:00                  720.0
2 2016-06-01 23:59:00                 1439.0
wnvonmuf

wnvonmuf2#

我使用了以下解决方案。首先,我从时间戳(date列)中过滤出小时、分钟和秒:

df['time_hours'] = df.date.dt.hour
df['time_minutes'] = df.date.dt.minute
df['time_seconds'] = df.date.dt.second

然后,我定义了一个函数来计算总时间(分钟),使用简单的代数:

def get_total_minutes(row):
    time_hours = row['time_hours']
    time_minutes = row['time_minutes']
    time_seconds = row['time_seconds']
    total_minutes = float((time_hours*60)+(time_minutes)+(time_seconds/60))
    return total_minutes

最后,我将该函数应用于每一行,并得到了预期的结果:

df['minutes'] = df.apply(lambda row: get_total_minutes(row), axis=1)

相关问题