我有一个具有无穷大值(inf)的 excel 文件,我总是遇到编程错误将其上传到 MySQL DB
ProgrammingError Traceback (most recent call last)
~/.local/lib/python3.8/site-packages/sqlalchemy/engine/base.py in _execute_context(self, dialect, constructor, statement, parameters, execution_options, *args, **kw)
1750 if not evt_handled:
-> 1751 self.dialect.do_executemany(
1752 cursor, statement, parameters, context
~/.local/lib/python3.8/site-packages/sqlalchemy/dialects/mysql/mysqldb.py in do_executemany(self, cursor, statement, parameters, context)
196 def do_executemany(self, cursor, statement, parameters, context=None):
--> 197 rowcount = cursor.executemany(statement, parameters)
198 if context is not None:
~/.local/lib/python3.8/site-packages/pymysql/cursors.py in executemany(self, query, args)
172 assert q_values[0] == "(" and q_values[-1] == ")"
--> 173 return self._do_execute_many(
174 q_prefix,
~/.local/lib/python3.8/site-packages/pymysql/cursors.py in _do_execute_many(self, prefix, values, postfix, args, max_stmt_length, encoding)
201 for arg in args:
--> 202 v = values % escape(arg, conn)
203 if isinstance(v, str):
~/.local/lib/python3.8/site-packages/pymysql/cursors.py in _escape_args(self, args, conn)
108 elif isinstance(args, dict):
--> 109 return {key: conn.literal(val) for (key, val) in args.items()}
110 else:
~/.local/lib/python3.8/site-packages/pymysql/cursors.py in <dictcomp>(.0)
108 elif isinstance(args, dict):
--> 109 return {key: conn.literal(val) for (key, val) in args.items()}
110 else:
~/.local/lib/python3.8/site-packages/pymysql/connections.py in literal(self, obj)
516 """
--> 517 return self.escape(obj, self.encoders)
518
~/.local/lib/python3.8/site-packages/pymysql/connections.py in escape(self, obj, mapping)
509 return ret
--> 510 return converters.escape_item(obj, self.charset, mapping=mapping)
511
~/.local/lib/python3.8/site-packages/pymysql/converters.py in escape_item(val, charset, mapping)
24 else:
---> 25 val = encoder(val, mapping)
26 return val
~/.local/lib/python3.8/site-packages/pymysql/converters.py in escape_float(value, mapping)
59 if s in ("inf", "nan"):
---> 60 raise ProgrammingError("%s can not be used with MySQL" % s)
61 if "e" not in s:
ProgrammingError: inf can not be used with MySQL
我试过的
我尝试先将 inf 转换为 0,但它更改了我不想要的数据。然后我将 inf 转换为 3 个小数点
df = df.replace(np.nan, 0)
df = np.round(df, decimals = 3)
我还替换了可能具有 inf 值但没有任何效果的列的类型。
df["col1"]=df["col1"].astype("float")
df["col2"]=df["col2"].astype("float")
错误后我也检查了 df,但没有 inf 值,但 pandas 也给出了错误。