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

如何修正Pandas合并两个CSV文件时日期日值错误的问题

修复日期显示错误的解决方案

我一眼就看出问题出在哪了——你最后格式化日期的时候用错了格式字符串,导致把月份数字当成日期显示,看起来像是日值全错了!咱们一步步来修正:

问题根源分析

你最后一步转换日期格式时写了:

combine['Date'] = combine['Date'].dt.strftime('%m-%b-%Y')

这里的%m代表两位数字的月份(比如6月就是06),%b是月份缩写(Jun),所以这个格式会输出06-Jun-2013,把月份数字放在了本该是日期的位置,自然看起来日值完全不对。

具体修复步骤

  1. 修正日期格式化字符串:把%m-%b-%Y改成%d-%b-%Y,其中%d代表两位数字的日期(比如2号就是02),这样就能正确显示「日-月缩写-年」的格式。
  2. 替换已弃用的append方法:Pandas 2.0+已经弃用了DataFrame.append(),建议用pd.concat()来合并数据框,兼容性更好。
  3. 核对文件名:你代码里写的是读取data1.csv/data2.csv,但实际文件名是table1.csv/table2.csv,这个要对应上,否则会报错。

完整修正后的代码

import numpy as np
import pandas as pd
from datetime import datetime

# 读取实际文件名对应的CSV
df1 = pd.read_csv('table1.csv', index_col=False, header=0)
df2 = pd.read_csv('table2.csv', index_col=False, header=0)

# 创建Date列:正确解析日期
df1['Date'] = df1.apply(lambda x: datetime.strptime(f"{x['Year']} {x['Month']} {x['Day']}", "%Y %m %d"), axis=1)
df2['Date'] = df2.apply(lambda x: datetime.strptime(f"{x['Year']} {x['Month']} {x['Day']}", "%Y %B %d"), axis=1)

# 筛选需要的列
df1 = df1[['Date', 'Tweet']]
df2 = df2[['Date', 'Tweet']]

# 合并数据框(替换append为concat)
combine = pd.concat([df1, df2], ignore_index=True)

# 按日期降序排序(如需升序可把ascending改成True)
combine.sort_values(by='Date', ascending=False, inplace=True)

# 修正日期格式化:用%d显示日
combine['Date'] = combine['Date'].dt.strftime('%d-%b-%Y')

# 写入最终CSV
combine.to_csv('combine.csv', encoding='utf-8', index=False)

修正后的正确输出

运行上面的代码后,你会得到符合预期的结果:

Date,Tweet
15-Jul-2018,Ocean is still cold
12-Dec-2017,Done with school
30-Sep-2017,Friends will be friends
30-May-2017,Summer is about to begin
21-Mar-2016,Today is my final
02-Jan-2015,Happy New Year
23-Jul-2013,I want ice-cream!
02-Jun-2013,Hello World

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:07:09