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

PySpark如何在字符串中间插入字符以转换为Timestamp?

解决方案:给时间字符串插入冒号

这个需求在处理时间格式转换时很常见,我给你两种实用的方案,分别适配单个字符串处理和批量数据场景:

方法1:Python原生正则替换(通用场景)

如果是处理单个字符串或者列表里的零散字符串,用正则表达式替换最直接。核心思路是把每一组4位数字拆成前两位和后两位,中间插入冒号:

import re

original_str = "Hour 0045 2322"
formatted_str = re.sub(r'(\d{2})(\d{2})', r'\1:\2', original_str)
print(formatted_str)  # 输出: Hour 00:45 23:22

简单解释下:

  • 正则(\d{2})(\d{2})会把连续4位数字拆成两个捕获组(前两位和后两位)
  • 替换模板\1:\2会把两个捕获组用冒号拼接起来,自动处理所有符合规则的4位数字片段

方法2:Pandas批量处理DataFrame列(适合数据分析场景)

如果你的数据存在Pandas DataFrame的列中,直接用str.replace结合正则就能批量完成格式转换,之后还能直接转成Timestamp类型:

import pandas as pd

# 模拟你的数据
df = pd.DataFrame({'time_col': ["Hour 0045 2322", "Hour 1234 0506", "Hour 0915 2040"]})

# 批量格式化列
df['formatted_time'] = df['time_col'].str.replace(r'(\d{2})(\d{2})', r'\1:\2', regex=True)

# 转换为Timestamp类型
df['timestamp'] = pd.to_datetime(df['formatted_time'], format='Hour %H:%M %H:%M')

print(df)

运行后输出:

time_col    formatted_time           timestamp
0  Hour 0045 2322  Hour 00:45 23:22 1900-01-01 00:45:00
1  Hour 1234 0506  Hour 12:34 05:06 1900-01-01 12:34:00
2  Hour 0915 2040  Hour 09:15 20:40 1900-01-01 09:15:00

注意这里pd.to_datetime的format参数要和你格式化后的字符串完全匹配,确保解析正确。如果你的时间串包含日期信息,只需要调整format模板即可。

小提示

如果担心正则误匹配其他4位数字(比如字符串里有非时间的4位数字),可以把正则写得更精准,比如只匹配Hour 后面的4位数字:

formatted_str = re.sub(r'(?<=Hour )(\d{2})(\d{2})', r'\1:\2', original_str)

不过根据你描述的固定格式,通用正则已经足够好用了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:48:37