如何在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
相关产品推荐
相关产品推荐

