如何修正Pandas合并两个CSV文件时日期日值错误的问题
修复日期显示错误的解决方案
我一眼就看出问题出在哪了——你最后格式化日期的时候用错了格式字符串,导致把月份数字当成日期显示,看起来像是日值全错了!咱们一步步来修正:
问题根源分析
你最后一步转换日期格式时写了:
combine['Date'] = combine['Date'].dt.strftime('%m-%b-%Y')
这里的%m代表两位数字的月份(比如6月就是06),%b是月份缩写(Jun),所以这个格式会输出06-Jun-2013,把月份数字放在了本该是日期的位置,自然看起来日值完全不对。
具体修复步骤
- 修正日期格式化字符串:把
%m-%b-%Y改成%d-%b-%Y,其中%d代表两位数字的日期(比如2号就是02),这样就能正确显示「日-月缩写-年」的格式。 - 替换已弃用的
append方法:Pandas 2.0+已经弃用了DataFrame.append(),建议用pd.concat()来合并数据框,兼容性更好。 - 核对文件名:你代码里写的是读取
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
相关产品推荐
相关产品推荐

