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

Python:移除列表中Timestamp字符串首尾标识,适配SQL Server datetime插入

解决Python中Timestamp类型值转SQL Server兼容日期字符串的问题

需求

将列表中的Timestamp类型值转换为纯日期时间字符串(移除开头的Timestamp(和结尾的)),使其能插入SQL Server的datetime字段。

现有方案的问题

此前尝试的两种列表推导式均存在缺陷:

  • 方案1:直接对非None值做字符串替换,会误处理带括号的普通元素(比如(HELLO)会被处理成(HELLO)。
  • 方案2:添加了字符串开头/结尾的判断,但由于Timestamp对象的字符串表示是大写Timestamp(...),而判断用的是小写timestamp(,导致匹配失效,无法处理目标值。

正确实现方案

核心思路是直接判断值的类型,而非通过字符串特征匹配,同时利用Timestamp对象的格式化方法生成标准日期字符串,避免字符串替换的风险。

代码实现

from pandas import Timestamp, NaT

modified_row_values = [1, '508', '505', '613', 'CHRIST', 'LAKE ROAD', None, 'PARK', 'Orange', '156789', 'XXX-XXX-XXXX', '1', 'NNE', 'ONNE', 'LAKE ROAD', None, 'PARK', 'NY', '123456', 'SCpython@GMAIL.COM', '9CC271', '9CC271', '9CC271', '41.200263', '-74.2094', 'Karl', Timestamp('2022-12-21 17:00:00'), NaT, Timestamp('2022-12-21 17:00:00'), 'Y', 'Y', 'Y', None, 'XTU', None, None, None, None, None, None, Timestamp('2022-12-21 16:24:04')]

# 列表推导式版本
processed_values = [
    value.strftime('%Y-%m-%d %H:%M:%S') if isinstance(value, Timestamp)
    else None if value is NaT
    else value
    for value in modified_row_values
]

# 循环版本(可读性更强)
processed_values = []
for value in modified_row_values:
    if isinstance(value, Timestamp):
        # 生成SQL Server datetime兼容的格式
        processed_values.append(value.strftime('%Y-%m-%d %H:%M:%S'))
    elif value is NaT:
        # 将NaT转为None,对应SQL的NULL
        processed_values.append(None)
    else:
        processed_values.append(value)

说明

  • 通过isinstance(value, Timestamp)精准识别Timestamp类型值,不会误判其他带括号的字符串。
  • 使用strftime('%Y-%m-%d %H:%M:%S')生成SQL Server datetime字段支持的标准日期字符串,比字符串替换更可靠。
  • 单独处理NaT,将其转为None,对应SQL中的NULL值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 09:13:27