首页 > 解决方案 > Python:pd.to_datetime 删除所有日期

问题描述

我目前正在从数据库(使用 PgAdmin)下载 CSV,并使用 Python 脚本重新格式化和过滤行以导入其他地方。但是,我遇到了一个非常奇怪的错误。

如果我尝试使用从数据库下载的 CSV 运行脚本,它会将其中一列中的所有日期转换为空白 (NaN)。但是,如果我事先在 Excel 中打开同一个文档,并将“另存为”到另一个 CSV 文件中,我的脚本会将所有日期正确地转换为所需的格式 ( dd/mm/yyyy)。

这是一个最小的复制案例:

import pandas as pd

file_path = r'C:\Users\MiguelTavares\Desktop\from_database.csv'
data = pd.read_csv(file_path)
data['start_date'] = pd.to_datetime(data['start_date'], errors='coerce', format='%d/%m/%Y')

print(data)

CSV 看起来像这样:

column1    column2    start_date
test1      test2      26/06/2019
test11     test22     25/07/2019

我相信这一切都会发生,因为我正在路过errors='coerce'。但是我需要传递它,因为如果我没有得到 ValueError,我需要将此信息放入日期时间,以便以后可以使用它进行计算。

ValueError: time data '2019-06-26' does not match format '%d/%m/%Y' (match)

CSV 文件的格式 (.csv) 和编码 (UTF-8) 与数据库中的文件、我“另存为”的文件以及其中的内容相同。那么,为什么我的脚本与我“另存为”的副本完美配合,而不是数据库中的那个?

提前致谢!

标签: pythonpandascsvdatetimepgadmin

解决方案


import pandas as pd

file_path = r'C:\Users\MiguelTavares\Desktop\from_database.csv'

# parse dates while reading csv. dayfirst=True parsing it from format DD/MM
data = pd.read_csv(file_path, parse_dates=['start_date'], dayfirst=True)

print(data)

这应该有效。


推荐阅读