ValueError:无法将字符串转换为浮点数:E-3 [重复]

Posted

技术标签:

【中文标题】ValueError:无法将字符串转换为浮点数:E-3 [重复]【英文标题】:ValueError: could not convert string to float: E-3 [duplicate] 【发布时间】:2015-04-15 18:14:09 【问题描述】:

我正在尝试访问 Microsoft Access 数据库表中的某些列,其中包含 double 类型的数字,但出现标题中提到的错误。用于查询数据库的代码如下,正在发生错误在执行 cur.execute(....) 命令的行中。基本上我正在尝试过滤掉在特定时间间隔内捕获的数据。如果我在 cur.execute(....) 命令中排除包含双数据类型的列 CM3_Up、CG3_Up、CM3_Down、CG3_Down,我不会收到错误消息。使用相同的逻辑从其他表访问双精度数据类型,它工作正常,我不确定出了什么问题。

代码:

start =datetime.datetime(2015,03,28,00,00)
a=start
b=start+datetime.timedelta(0,240)
r=7
while a < (start+datetime.timedelta(1)):
    params = (a,b)
    sql = "SELECT Date_Time, CM3_Up, CG3_Up, CM3_Down, CG3_Down FROM
          Lysimeter_Facility_Data_5 WHERE Date_Time >= ? AND Date_Time <= ?"
    for row in cur.execute(sql,params):
        if row is None:
            continue
        r = r+1
        ws.cell(row = r,column=12).value = row.get('CM3_Up')
        ws.cell(row = r,column=13).value = row.get('CG3_Up')
        ws.cell(row = r,column=14).value = row.get('CM3_Down')
        ws.cell(row = r,column=15).value = row.get('CG3_Down')

    a = a+five_min
    b = b+five_min
wb.save('..\SE_SW_Lysimeters_Weather_Mass_Experiment-02_03_26_2015.xlsx')

完整的错误报告:

Traceback (most recent call last):
  File "C:\DB_PY\access_mdb\db_to_xl.py", line 318, in <module>
    for row in cur.execute(sql,params):
  File "build\bdist.win32\egg\pypyodbc.py", line 1920, in next
    row = self.fetchone()
  File "build\bdist.win32\egg\pypyodbc.py", line 1871, in fetchone
    value_list.append(buf_cvt_func(alloc_buffer.value))
ValueError: could not convert string to float: E-3

【问题讨论】:

【参考方案1】:

关于这个讨论: Python: trouble reading number format

问题可能在于 e 应该是 d,例如:

float(row.get('CM3_Up').replace('E', 'D'))

虽然对我来说听起来很奇怪,但我对 Python 知之甚少。

【讨论】:

此解决方案无效 那我没办法了,抱歉。【参考方案2】:

听起来您收到了类似“2.34E-3”的字符串,因此请尝试转换。不懂 Python,但在 C# 中可能是这样的:

ws.cell(row = r,column=12).value = Convert.ToDouble(row.get('CM3_Up'))
ws.cell(row = r,column=13).value = Convert.ToDouble(row.get('CG3_Up'))
ws.cell(row = r,column=14).value = Convert.ToDouble(row.get('CM3_Down'))
ws.cell(row = r,column=15).value = Convert.ToDouble(row.get('CG3_Down'))

【讨论】:

在 Python 中为float(row.get('CM3_Up')) 我试过 float(row.get('CM3_Up')) 但显示相同的错误。只是为了添加更多细节,从访问数据库中读取的值如下:-2.91953029510136(CM3_Up)、-84.8983788757143 (CG3_Up)、3.04633983884509 (CM3_Down)、-5.80184926507136(CG3_Down)。 @Mukunda - 您能否提供一个小型示例数据库以及导致错误的表?如果是这样,请将其上传到可通过 Internet 访问的位置(例如 Wikisend)并在此处发布链接,以便我们尝试重现问题。 请在此处找到示例数据库的链接,wikisend.com/download/504484/mukunda_sample.accdb 那张桌子很好。

以上是关于ValueError:无法将字符串转换为浮点数:E-3 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

ValueError:无法将字符串转换为浮点数:'Bad'

ValueError:无法将字符串转换为浮点数:'2100 - 2850'

ValueError:无法将字符串转换为浮点数:'Mme'

ValueError:无法将字符串转换为浮点数:'62,6'

ValueError:无法将字符串转换为浮点数:''20,99''

我收到 ValueError:无法将字符串转换为浮点数:'8,900' [重复]