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

CSV日期列240行后格式不一致,如何统一为%Y-%m-%d格式?

日期格式统一处理方案

你的核心需求是将CSV中Date列的两种日期格式统一为%Y-%m-%d(如1880-01-15),其中第240行之后的日期是%d-%m-%y格式(如15-01-00)。以下是修正后的实现代码:

import pandas as pd

# 直接读取原始CSV,无需重复保存再读取
df = pd.read_csv("sea_levels_1880_2015.csv")

# 处理Date列中的逗号分隔(如果原数据存在该情况)
df['Date'] = df['Date'].str.replace(',', '-')

# 针对不同行的日期格式分别转换
# 前240行使用%Y-%m-%d格式,240行及以后使用%d-%m-%y格式
# 两位年份会自动根据数据范围推断世纪(如00对应2000,99对应1999)
df.loc[:239, 'Date'] = pd.to_datetime(df.loc[:239, 'Date'], format='%Y-%m-%d')
df.loc[240:, 'Date'] = pd.to_datetime(df.loc[240:, 'Date'], format='%d-%m-%y')

# 将datetime类型统一格式化为%Y-%m-%d的字符串(若需保留datetime类型可跳过此步)
df['Date'] = df['Date'].dt.strftime('%Y-%m-%d')

# 保存处理后的文件
df.to_csv("sea_lvl_1880_2015_updated.csv", index=False)

# 查看处理结果
print(df)

关键修正说明

  • 移除了不必要的重复保存/读取操作,直接在原始DataFrame上处理,提升效率。
  • 使用df.loc精准定位不同格式的行,指定对应格式进行转换,避免格式不匹配报错。
  • 自动处理两位年份的世纪推断,适配数据的时间范围(1880-2015)。

灵活适配版本(无需固定行号)

如果不确定格式切换的具体行号,可以通过字符串特征自动判断格式,代码如下:

import pandas as pd

df = pd.read_csv("sea_levels_1880_2015.csv")
df['Date'] = df['Date'].str.replace(',', '-')

# 自动识别格式:以4位数字开头的用%Y-%m-%d,否则用%d-%m-%y
mask = df['Date'].str.match(r'^\d{4}-')
df.loc[mask, 'Date'] = pd.to_datetime(df.loc[mask, 'Date'], format='%Y-%m-%d')
df.loc[~mask, 'Date'] = pd.to_datetime(df.loc[~mask, 'Date'], format='%d-%m-%y')

df['Date'] = df['Date'].dt.strftime('%Y-%m-%d')
df.to_csv("sea_lvl_1880_2015_updated.csv", index=False)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 06:20:59