Pandas修改日期列类型后保存CSV未生效问题求助
解决Pandas保存CSV后日期列类型变回object的问题
问题本质
CSV是纯文本格式,本身不存储数据类型信息。当你把datetime64[ns]类型的列保存到CSV时,Pandas会自动将其转换为字符串格式;重新读取该CSV时,Pandas默认会把这些字符串列识别为object类型,这是CSV格式的固有特性,并非代码错误。
解决方案
核心思路是在读取CSV时主动解析日期列,以下是针对你代码的具体修改方案:
方案1:读取时直接解析日期列
修改pd.read_csv的参数,指定需要解析的日期列,并适配你的日/月/年日期格式:
import pandas as pd # 读取时直接将指定列解析为datetime类型,dayfirst=True适配日/月/年格式 df = pd.read_csv("3thParty.csv", parse_dates=["Open Date", "Close Date"], dayfirst=True) print(df.dtypes) # 此时"Open Date"和"Close Date"已为datetime64[ns] # 保存时指定日期字符串格式,保证可读性与格式一致性 df.to_csv("3thParty.csv", index=None, header=True, date_format="%d/%m/%Y")
参数说明
parse_dates=["Open Date", "Close Date"]:告诉Pandas读取时直接把这两列解析为datetime类型,省去后续手动转换步骤。dayfirst=True:你的日期格式是日/月/年(比如04/06/2021代表6月4日),加上该参数可避免Pandas误按月/日/年解析。date_format="%d/%m/%Y":强制指定保存时的日期字符串格式,确保输出的CSV日期可读性统一,也方便后续读取时的解析。
方案2:读取后统一转换(适合无法修改读取逻辑的场景)
如果必须先读取原始CSV再处理,每次读取后执行转换步骤即可(因为CSV无法保存类型信息):
import pandas as pd df = pd.read_csv("3thParty.csv") # 转换日期列,指定dayfirst=True确保格式解析正确 df[["Open Date", "Close Date"]] = df[["Open Date", "Close Date"]].apply(pd.to_datetime, dayfirst=True) print(df.dtypes) df.to_csv("3thParty.csv", index=None, header=True, date_format="%d/%m/%Y")
关键提示
无论采用哪种方案,CSV本身无法存储datetime类型,所以每次读取都需要主动解析日期列,这是CSV格式的特性,并非代码问题。
内容的提问来源于stack exchange,提问作者Guillermo Kelly
相关产品推荐
相关产品推荐

