首页 > 编程问答 >pandas read_sql 导致值错误:“年份 -10100 超出范围”由数据库中的日期损坏引起

pandas read_sql 导致值错误:“年份 -10100 超出范围”由数据库中的日期损坏引起

时间:2024-07-30 04:14:29浏览次数:13  
标签:python sql pandas dataframe

我正在运行一个脚本将数据从 oracle 迁移到 postgres。运行以下命令时

df = pd.read_sql(
    query,
    oracle_conn,
)

会导致错误

ValueError:year -10100 is out of range

对于跨越数千的某些行,有些日期已损坏并且年份数字很大。例如,下面是损坏的日期,而下一个是有效的日期。

10101-11-29 22:58:59000.
2024-03-19 18:25:49.000

是否有任何方法可以更改 read_sql,以便无论年份范围是什么,它仍然读取损坏的日期?


虽然无法直接让 read_sql 忽略年份范围错误,但可以采取一些方法来处理此问题:

1. 使用 coerce 参数将无效日期转换为 NaT :

read_sql 函数中,可以使用 parse_dates 参数指定要解析为日期时间的列,并使用 coerce 参数将无效日期转换为 NaT (Not a Time)。

python df = pd.read_sql( query, oracle_conn, parse_dates=['your_date_column'], # 替换为的日期列名 coerce_errors='coerce' )

这会将所有无效日期替换为 NaT ,可以稍后在数据框中处理它们。

2. 在 SQL 查询中处理无效日期:

可以在 SQL 查询中直接处理无效日期。例如,可以使用 CASE 语句检查年份是否在有效范围内,如果是,则返回日期,否则返回 NULL 或其他默认值。

sql SELECT CASE WHEN EXTRACT(YEAR FROM your_date_column) BETWEEN 1900 AND 2100 THEN your_date_column -- 调整年份范围 ELSE NULL -- 或其他默认值 END AS your_date_column FROM your_table;

这将防止 read_sql 函数遇到无效日期,并允许更干净地处理数据。

3. 使用自定义转换函数:

可以编写一个自定义函数来解析日期字符串,并将其传递给 converters 参数。

```python import datetime

def parse_date(date_str): try: return datetime.datetime.strptime(date_str, '%Y-%m-%d %H:%M:%S%f') except ValueError: # 处理无效日期,例如返回 None 或引发异常 return None

df = pd.read_sql( query, oracle_conn, converters={'your_date_column': parse_date} # 替换为的日期列名 ) ```

这允许完全控制日期解析过程,并根据需要处理无效日期。

选择最佳方法取决于的具体需求和数据集中无效日期的数量。如果只需要识别和忽略无效日期,那么使用 coerce 参数是最简单的选择。但是,如果需要对无效日期执行更复杂的操作,则在 SQL 查询中处理它们或使用自定义转换函数可能更合适。

标签:python,sql,pandas,dataframe
From: 78808903

相关文章

  • 即使安装了软件包,也找不到 python 模块句子转换器
    对于我的python脚本(如下所示),我使用句子转换器包,其中包含SBERT模型。即使在执行“piplist”时明确列出该软件包,并且还安装了torch,所有内容都更新到最新版本,但仍然找不到该模块。脚本:importnumpyasnpimportpandasaspdfromsentence_transformersimportSenten......
  • 有没有办法在 python 中返回类实例的布尔属性?
    我想组织我玩的游戏中的汽车数据。为此,我创建了一个“Car”类。我希望将此类实例的一些属性作为布尔值,这样我就可以将此类的所有实例放入列表中并过滤它们。我当前的解决方案不起作用,因为,我收到以下错误消息:TypeError:__repr__returnednon-string(typeCar)我使用......
  • python 正则表达式匹配一行中的多个单词而不转到下一行
    我正在编写一个解析器来解析以下输出:admin@str-s6000-on-5:~$showinterfacestatusEthernet4InterfaceLanesSpeedMTUAliasVlanOperAdminTypeAsymPFC------------------------------------------......
  • 使用 Python 平滑和对称不规则形状和曲线
    我需要完成三项任务:正则化曲线曲线的对称性完成不完整的曲线例如,这里是输入和预期的输出图像:输入输出|||在一般设置中,形状可以由任何SVG曲线基元(贝塞尔曲线、直线、弧线)表示。为了统一表示,示例包含曲线的折线近似。这些折线保存为......
  • 在Python中通过绝对路径引用数据文件夹
    我有一个大型python项目,其中数据太大,无法每次都以相同的方式共享。不同的人可能会使用网络位置或将某些内容复制到本地驱动器。该路径由不同子文件夹中的脚本和笔记本使用。例如,我将创建一个config.py来定义数据文件夹的路径。importsyssys.path.append('../'......
  • python三天速成记(看完你就会)day3 满满干货~
    续上文啦~EXCEL表的操作上一篇文章讲了怎么读取和操作txt和csv文档,但其实我们生活中还有一个常用的文本格式那就是excel文件,特别是在对大量数据进行处理的时候。excel文件的用处和广泛。其实在python中有很多库可以处理excel文件,但是本文主要介绍使用最实用最广泛的库pan......
  • mysql的主从复制和读写分离
    目录主从复制主从复制的模式1.异步模式2.全同步模式3.半同步模式主从复制的延迟主从复制的延迟的原因解决方案双一设置性能化设置主从复制如何实现安装步骤读写分离实验步骤面试题主从复制主从复制的模式1.异步模式mysql的默认模式:主库在更新完事务之后会......
  • mysql的MHA以及故障模拟
    目录MHA概念MHA的组件MHA的特点实验:搭建完成MHA的架构实验:主备切换实验结果实验:故障切换实验:故障恢复MHA概念MHA:高可用模式下的故障切换,基于主从复制。它解决的是单点故障和主从复制不能切换的问题。它至少需要3台。故障切换过程0-30秒。它能根据VIP地址所在的主机......
  • PostgreSQL 之 to_timestamp函数
    to_timestamp是PostgreSQL中的一个函数,用于将字符串或数字转换为时间戳。以下是关于to_timestamp的详细介绍:引入版本to_timestamp函数在PostgreSQL7.3版本中引入。语法to_timestamp有两种主要的用法:1.将字符串转换为时间戳to_timestamp(text,text)第一......
  • Python输入验证改进的其他方式
    题目[题目来源:Python编程快速上手——让繁琐工作自动化(第二版)第三章实践项目,下面的解答程序为我自己完成的,仅供参考。]编写一个名为collatz()的函数,他有一个名为number的参数。如果参数是偶数,那么collatz()就输出number//2,并返回该值。如果参数是奇数,那么collatz()就......