看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gr99123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
在某些分析任务中,将时间以小时为单位可以简化复杂的分析过程,尤其是当天数不重要或时间跨度较小时。例如分析一批时间数据来计算平均工作时长或总工作时间。如果时间跨度主要集中在几天以内,转换为 小时:分钟:秒
格式后更便于统计和计算。
我们构造数据如下:
import pandas as pd
data = {'id': [1123, 2342],
'time': ['2 days 03:29:05', '1 days 01:57:53']
}
df = pd.DataFrame(data)
df['time'] = pd.to_timedelta(df['time'])
df
'''
id time
0 1123 2 days 03:29:05
1 2342 1 days 01:57:53
'''
需要增加一个 new 列,将 time 列的时长显示为 小时:分钟:秒
这样的格式,即:
'''
id time new
0 1123 2 days 03:29:05 51:29:05
1 2342 1 days 01:57:53 25:57:53
'''
这段代码用于将 df
DataFrame 中的 time
列(假设它是 timedelta
类型)转换为 小时:分钟:秒
的格式,并将结果添加到一个新列 new
中。下面是详细的解释:
new = (
df.time.dt
.components
.apply(lambda x: f'{x.days*24+x.hours:02}:{x.minutes:02}:{x.seconds:02}',
axis=1)
)
df.assign(new=new)
df.time.dt
df.time.dt
是 pandas 的时间序列访问器,它提供对时间序列数据的访问。它允许你从 timedelta
或 datetime
对象中提取日期和时间的组件(如年、月、日、小时、分钟、秒等)。
.components
.components
是一个属性,它返回一个 DataFrame
,其中包含 timedelta
对象的各个组件:天数、小时、分钟和秒。对于每个 timedelta
对象,components
会提供一个包含这些值的 Series
。
.apply(lambda x: f'{x.days*24+x.hours:02}:{x.minutes:02}:{x.seconds:02}', axis=1)
apply
方法用于沿着 DataFrame
的指定轴(这里是 axis=1
,即按行)应用一个函数。这里的 lambda 函数将每一行的组件(天数、小时、分钟、秒)格式化为 小时:分钟:秒
的格式:
x.days * 24 + x.hours
:将天数转换为小时数,并与现有小时数相加,得到总小时数。x.minutes
:直接提取分钟数。x.seconds
:直接提取秒数。:02
表示格式化为两位数字,不足的位数用零填充。
df.assign(new=new)
创建一个新的 DataFrame,除了原始的 df
列外,还增加了一个名为 new
的新列,其值来自前面计算出的 new
列。assign
方法不会修改原始 DataFrame,而是返回一个新的 DataFrame。
以下是如何将这段代码完整地应用到 DataFrame 上的示例:
import pandas as pd
# 构造示例数据
data = {
'id': [1123, 2342],
'time': ['2 days 03:29:05', '1 days 01:57:53']
}
# 创建 DataFrame
df = pd.DataFrame(data)
# 将 'time' 列转换为 timedelta 类型
df['time'] = pd.to_timedelta(df['time'])
# 计算新的 'new' 列
new = (
df.time.dt
.components
.apply(lambda x: f'{x.days*24+x.hours:02}:{x.minutes:02}:{x.seconds:02}',
axis=1)
)
# 将 'new' 列添加到 DataFrame 中
df = df.assign(new=new)
print(df)
输出结果:
id time new
0 1123 2 days 03:29:05 51:29:05
1 2342 1 days 01:57:53 25:57:53
这样你就可以将 timedelta
类型的 time
列转换为 小时:分钟:秒
格式,并将其存储在新列 new
中。
(完)
更新时间:2024-08-18 16:23:16 标签:pandas python 格式 小时 时间