python中无法将string转化为float是什么原因,该怎样解决呢?

# -*- coding: utf-8 -*-
import numpy as np
import MySQLdb as mdb
import gl
import matplotlib.pyplot as plt

from matplotlib.pyplot import plot,savefig
from pylab import *
try:
conn=mdb.connect(host=gl.hostname,user=gl.username,passwd=gl.passwd,db=gl.database)
cur=conn.cursor(mdb.cursors.DictCursor)
cur.execute("SELECT SUBSTRING(F_Time1,5,2) as subt,sum(quan_times) FROM (SELECT F_Time as F_Time1,cat_circle_num as quan_times FROM `track_cat` GROUP BY F_Time) as s2 GROUP BY SUBSTRING(F_Time1,5,2) ")
x=[] #清空
y=[]
rows = cur.fetchall()
for row in rows:
x.append(row["subt"])
y.append(row["sum(quan_times)"])
finally:
cur.close
conn.close
plt.plot(x, y)# use pylab to plot x and y
plt.xlim(00, 12)
plt.ylim(0, 20.)
plt.grid()
plt.show()

错误信息是:
>pythonw -u "5.py"
Traceback (most recent call last):
File "5.py", line 41, in <module>
plt.plot(x, y)# use pylab to plot x and y
File "F:\Python27\lib\site-packages\matplotlib\pyplot.py", line 2458, in plot
ret = ax.plot(*args, **kwargs)
File "F:\Python27\lib\site-packages\matplotlib\axes.py", line 3849, in plot
self.add_line(line)
File "F:\Python27\lib\site-packages\matplotlib\axes.py", line 1443, in add_line
self._update_line_limits(line)
File "F:\Python27\lib\site-packages\matplotlib\axes.py", line 1451, in _update_line_limits
p = line.get_path()
File "F:\Python27\lib\site-packages\matplotlib\lines.py", line 644, in get_path
self.recache()
File "F:\Python27\lib\site-packages\matplotlib\lines.py", line 392, in recache
x = np.asarray(xconv, np.float_)
File "F:\Python27\lib\site-packages\numpy\core\numeric.py", line 235, in asarray
return array(a, dtype, copy=False, order=order)
ValueError: could not convert string to float:
>Exit code: 1

你从db里取出来的不是数是string吧。你改成x.append(float(row["subt"]))和y.append(float(row["sum(quan_times)"]))试试。

拓展:

1、浮点型数据类型,FLOAT 数据类型用于存储单精度浮点数或双精度浮点数。浮点数使用 IEEE(电气和电子工程师协会)格式。浮点类型的单精度值具有 4 个字节,包括一个符号位、一个 8 位 excess-127 二进制指数和一个 23 位尾数。尾数表示一个介于 1.0 和 2.0 之间的数。由于尾数的高顺序位始终为 1,因此它不是以数字形式存储的。此表示形式为 float 类型提供了一个大约在 -3.4E-38 和 3.4E+38 之间的范围。

2、可根据应用程序的需求将变量声明为 float 或 double。这两种类型之间的主要差异在于它们可表示的基数、它们需要的存储以及它们的范围。下表显示了基数与存储需求之间的关系。

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-11-28
floatNum = float('3.14')

这样追问

我试了不可以,因为我那里的x是一个数组了,这该怎样改呢?

追答

x = [float(i) for i in x]
y = [float(i) for i in y]
plt.plot(x,y)

第2个回答  2017-05-14
好乱,懒得看
你把那个变量输出出来看看是个什么玩意,再确定看是不是能转换成float
第3个回答  2012-12-04
把空串丢掉,非空串再转换不就得了
第4个回答  2012-11-29
你从db里取出来的不是数是string吧。你改成x.append(float(row["subt"]))和y.append(float(row["sum(quan_times)"]))试试追问

还是不可以呢~~不过谢谢了!

追答

你得看看你的row["subt"]和row["sum(quan_times)"]具体是什么,你需要把这两个变成float。

追问

那两个取出来的都是字符串了~~在变成float这点不怎么会~~

追答

你看看你那个字符串的内容是什么。

追问

x是['', '01', '02', '03', '04', '05']
y是[Decimal('0'), Decimal('7'), Decimal('2'), Decimal('5'), Decimal('5'), Decimal('9')]

追答

你的x里第一个字符串是空的啊,那当然转不成float了。

本回答被提问者和网友采纳
相似回答