You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas中根据时间单位列将时间值转换为秒数新列?

Pandas根据时间单位转换为秒数的实现方法

这里提供几种高效的实现方式,根据你的数据集大小和需求选择:

方法1:向量化字典映射(推荐大数据量)

通过定义单位到秒的转换系数字典,结合map方法批量匹配系数,再与time列相乘,全程是向量化操作,效率最高。

import pandas as pd

# 示例数据
df = pd.DataFrame({
    'time': [1.5, 30, 500],
    'time_unit': ['h', 'm', 'ms']
})

# 单位转秒的系数映射
unit_to_seconds = {
    'h': 3600,
    'm': 60,
    'ms': 0.001
}

# 生成秒数列
df['seconds'] = df['time'] * df['time_unit'].map(unit_to_seconds)

运行后df的seconds列会得到5400.0、1800.0、0.5,完全符合转换逻辑。

方法2:多条件选择(可读性强)

用np.select明确列出每个单位的转换规则,逻辑清晰,适合需要直观展示判断条件的场景,同样是向量化操作,效率接近方法1。

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'time': [1.5, 30, 500],
    'time_unit': ['h', 'm', 'ms']
})

# 定义判断条件和对应转换操作
conditions = [
    df['time_unit'] == 'h',
    df['time_unit'] == 'm',
    df['time_unit'] == 'ms'
]

conversion_ops = [
    df['time'] * 3600,
    df['time'] * 60,
    df['time'] * 0.001
]

# 生成结果,默认值设为NaN处理未知单位
df['seconds'] = np.select(conditions, conversion_ops, default=np.nan)

方法3:逐行处理(小数据集可用)

用apply结合lambda函数逐行判断单位并转换,优点是写法灵活,但属于逐行循环操作,大数据量下速度会很慢,仅适合小数据集。

import pandas as pd

df = pd.DataFrame({
    'time': [1.5, 30, 500],
    'time_unit': ['h', 'm', 'ms']
})

df['seconds'] = df.apply(
    lambda row: row['time'] * 3600 if row['time_unit'] == 'h' 
    else row['time'] * 60 if row['time_unit'] == 'm' 
    else row['time'] * 0.001,
    axis=1
)

性能提示

  • 优先选择方法1,向量化操作在百万级数据上的速度比逐行处理快几十倍甚至上百倍。
  • 如果有未知的时间单位,方法2可以通过default参数设置默认值(比如np.nan),方便后续处理异常数据。

内容的提问来源于stack exchange,提问作者Energizer1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 06:01:09