拆分日期列时遇ValueError: Columns must be same length as key错误求助
日期列拆分报错:ValueError: Columns must be same length as key
问题场景
执行代码拆分日期列时触发错误:
df[['date1', 'date2', 'date3']] = df['Date'].str.split('/')
错误信息:
ValueError: Columns must be same length as key
已确认单独执行df['Date'].str.split('/')能正常返回每个含3个元素的列表,且日期字符串存在8位(如26/12/05)和10位(如22/05/2022)两种长度。
问题根源
str.split('/') 默认返回的是存储列表的Series对象,而非直接拆分为多列的DataFrame。当你试图将这个Series直接赋值给3个目标列时,Pandas无法自动将列表中的元素映射到对应列,因此抛出长度不匹配的错误——哪怕每个列表的元素数量确实是3个。
解决方法
在str.split方法中添加expand=True参数,强制将拆分结果展开为多列DataFrame,这样就能直接赋值给目标列:
df[['date1', 'date2', 'date3']] = df['Date'].str.split('/', expand=True)
额外校验(可选)
如果仍担心存在异常行,可以先排查拆分后元素长度不一致的记录:
# 新增列记录拆分后的元素数量 df['split_length'] = df['Date'].str.split('/').str.len() # 筛选出拆分后元素数量不等于3的行 print(df[df['split_length'] != 3])
若输出为空,说明所有行都能正确拆分为3个元素,使用上述方案即可解决问题。
关于日期格式的补充
8位和10位的日期字符串(两位/四位年份)不会影响拆分逻辑,拆分后可后续统一处理年份格式(比如将两位年份转换为四位)。
内容的提问来源于stack exchange,提问作者krhermit
相关产品推荐
相关产品推荐

