【问题标题】:Python: pd.to_datetime deleting all datesPython:pd.to_datetime 删除所有日期
【发布时间】:2020-06-15 19:37:30
【问题描述】:

我目前正在从数据库(使用 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) 与数据库中的文件、我“另存为”的文件以及其中的内容相同。那么,为什么我的脚本与我“另存为”的副本完美配合,而不是数据库中的那个?

提前致谢!

【问题讨论】:

  • 你的数据格式不应该是“%Y%d/%m”吗?
  • 但我稍后需要在 '%d/%m/%Y' 中使用它,这与其中一个 CSV 文件完美配合...
  • 根据错误,您的日期已经采用正确的日期时间格式,'2019-06-26' 或包含不同格式的行。 dd/mm/yyyy 不是正确的日期时间格式,它是一个字符串。
  • 嗯,但是如果我不将其转换为日期时间格式,我稍后会在代码中收到以下错误:TypeError: '

标签: python pandas csv datetime pgadmin


【解决方案1】:

这应该可以工作,如果这不起作用,那么 start_date 列中有一些值具有不同的格式:

df = pd.read_csv('test.csv', sep='\s+')
df['start_date'] = pd.to_datetime(df['start_date'])
print(df)

  column1 column2 start_date
0   test1   test2 2019-06-26
1  test11  test22 2019-07-25

【讨论】:

  • 您好,出现以下错误:“pandas._libs.tslibs.np_datetime.OutOfBoundsDatetime: Out of bounds nanosecond timestamp: 3000-12-31 00:00:00”
  • 您能以某种方式发布您的完整 CSV 吗?
【解决方案2】:
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)

这应该可行。

【讨论】:

  • 使用它并保持 pd.to_datetime 给了我相同的结果:NaN/空白日期单元格与数据库中的 CSV,但使用相同的 CSV“另存为”一切正常。使用它并删除 pd.to_datetime 在脚本后面给我以下错误: TypeError: '
  • 我猜数据库中的 csv 中的日期格式不固定。第一步应该是弄清楚哪些行是错误的。您能否发布指向 data.start_date 的链接?
猜你喜欢
  • 1970-01-01
  • 2021-11-21
  • 1970-01-01
  • 2017-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-08
  • 1970-01-01
相关资源
最近更新 更多