在Polars中转换字符串为DateTime时遇到问题,请求协助
Polars字符串列转DateTime列的正确实现
问题根源
你的代码存在两个关键错误:
- 赋值方式错误:Polars数据框是不可变对象,不能通过
df['col'].with_columns = ...的方式修改数据,必须将with_columns的返回值重新赋值给变量(如原df)。 - 日期格式不匹配:输入字符串
00000001011970的结构是时分秒日月年(前6位为000000即HHMMSS,接下来01是日、01是月,最后1970是年),但你指定的格式%Y-%m-%d %H:%M:%S和输入结构完全不符,导致转换失效。
正确代码实现
import polars as pl df = pl.from_repr(""" ┌────────────────┐ │ col │ │ --- │ │ str │ ╞════════════════╡ │ 00000001011970 │ │ 00000001011970 │ │ 00000001011970 │ └────────────────┘ """) # 转换字符串列为DateTime列,保留原列并新增解析后的列 df = df.with_columns( pl.col('col').str.to_datetime(format='%H%M%S%d%m%Y').alias('parsed_EventTime') ) print(df)
执行后输出结果:
┌────────────────┬─────────────────────┐ │ col │ parsed_EventTime │ │ --- │ --- │ │ str │ datetime[μs] │ ╞════════════════╪═════════════════════╡ │ 00000001011970 │ 1970-01-01 00:00:00 │ │ 00000001011970 │ 1970-01-01 00:00:00 │ │ 00000001011970 │ 1970-01-01 00:00:00 │ └────────────────┴─────────────────────┘
补充说明
- 如果不需要保留原
col列,可以用select直接生成新数据框:df = df.select( pl.col('col').str.to_datetime(format='%H%M%S%d%m%Y').alias('parsed_EventTime') ) - 若不确定日期格式,可尝试让Polars自动推断(但指定格式更高效准确):
df = df.with_columns( pl.col('col').str.to_datetime(infer_datetime_format=True).alias('parsed_EventTime') )
内容的提问来源于stack exchange,提问作者user
相关产品推荐
相关产品推荐

