如何批量访问Pandas DataFrame元素属性并转换为timedelta?
解决方案
你之前的代码报错,是因为df.time是pandas的Series对象,不能直接调用.hour属性——单个Timestamp对象有.hour属性,但Series需要用.dt访问器来批量获取每个元素的时间属性。
以下两种批量处理的方法都可以:
方法1:结合dt访问器和apply
import pandas as pd import numpy as np index = [0, 1] df = pd.DataFrame(columns=['time', 'timedelta'], index=index) # 推荐用方括号索引列,比点语法更稳妥(避免列名和方法名冲突) df['time'] = [pd.Timestamp('2022-04-07 22:10:00'), pd.Timestamp('2022-04-07 22:11:00')] # 批量提取hour,转成timedelta df['timedelta'] = df['time'].dt.hour.apply(lambda x: np.timedelta64(x, 'h')) print(df)
方法2:用pandas内置的to_timedelta
这种方法更简洁,不需要手动调用np.timedelta64:
import pandas as pd import numpy as np index = [0, 1] df = pd.DataFrame(columns=['time', 'timedelta'], index=index) df['time'] = [pd.Timestamp('2022-04-07 22:10:00'), pd.Timestamp('2022-04-07 22:11:00')] df['timedelta'] = pd.to_timedelta(df['time'].dt.hour, unit='h') print(df)
两种方法运行后都会得到正确结果:
time timedelta 0 2022-04-07 22:10:00 22 hours 1 2022-04-07 22:11:00 21 hours
内容的提问来源于stack exchange,提问作者Emil Ertl
相关产品推荐
相关产品推荐

