在Julia中将String31格式的DataFrame时间列转换为datetime
将DataFrame的String31类型Time列转换为datetime类型
错误原因
你执行的data_raw.Time[1,:]获取的是整个Time列的向量数据(类型为Vector{String31}),而DateTime()单参数调用仅支持解析单个字符串,直接传入向量就会触发类型不匹配的MethodError。
解决方案
以下是几种可行的处理方式:
直接广播解析(最简洁)
String31是String的子类型,可直接对整列广播DateTime函数完成批量解析:using Dates # 替换原列 data_raw.Time = DateTime.(data_raw.Time, "yyyymmdd HHMMSS")使用DataFrames的transform函数(规范操作)
更符合DataFrame数据处理的习惯,可生成新列或替换原列:using DataFrames, Dates # 替换原列 data_raw = transform(data_raw, :Time => (x -> DateTime.(x, "yyyymmdd HHMMSS")) => :Time) # 或者更直观的写法 data_raw[!, :Time] = DateTime.(data_raw[!, :Time], "yyyymmdd HHMMSS")备选:先转普通String再解析
若担心String31的兼容性,可先转换为普通String类型再解析(一般无需此步骤):data_raw.Time = DateTime.(String.(data_raw.Time), "yyyymmdd HHMMSS")
注意事项
- 确认时间字符串格式与
"yyyymmdd HHMMSS"完全匹配:比如年份是两位(yy)还是四位(YYYY)、时分秒是否为连续数字(无分隔符),格式不匹配会导致解析失败。
内容的提问来源于stack exchange,提问作者erfanvahdat
相关产品推荐
相关产品推荐

