目录
  • 出现inf的原因
  • 解决办法
  • PS:为了方便后续处理,可以利用numpy,将这些inf值进行替换。

使用Pandas从MySQL读取数据,在处理之后再写回到数据库时报了一个错误:

sqlalchemy.exc.ProgrammingError: (MySQLdb._exceptions.ProgrammingError) inf can not be used with MySQL

很明确报错说明,是因为DataFrame中存在inf数据

出现inf的原因

在数据处理过程中用到了除法,并且出现了除数为0,导致出现inf,而数据库不支持写入该值
说明,np.inf为正无穷,-np.inf为负无穷

解决办法

将处理过之后的DataFrame中的inf值替换掉,替换代码:

df = df.replace([np.inf, -np.inf], np.nan)

上述代码将处理结果中的正无穷和负无穷都替换为空值,最后写入到数据为中的为null值

PS:为了方便后续处理,可以利用numpy,将这些inf值进行替换。

1. 将某1列(series格式)中的 inf 替换为数值。

import numpy as np
 
df['Col'][np.isinf(df['Col'])] = -1

2. 将某1列(series格式)中的 inf 替换为NA值。

import numpy as np
 
df['Col'][np.isinf(df['Col'])] = np.nan

3. 将整个DataFrame中的 inf 替换为数值(空值同理)。#感谢评论区的补充

import numpy as np
 
df.replace(np.inf, -1) #替换正inf为-1
 
#替换正负inf为NA,加inplace参数 
df.replace([np.inf, -np.inf], np.nan, inplace=True)
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。