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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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。这两种类型之间的主要差异在于它们可表示的基数、它们需要的存储以及它们的范围。下表显示了基数与存储需求之间的关系。

参考技术A floatNum = float('3.14')

这样追问

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

追答

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

参考技术B 好乱,懒得看
你把那个变量输出出来看看是个什么玩意,再确定看是不是能转换成float
参考技术C 把空串丢掉,非空串再转换不就得了 参考技术D 你从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了。

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

如何将float转换为string

在C语言中,可以通过_gcvt函数实现这个功能 将float数据转换为string
在java语言中,可以通过如下几种方法:

Float f = 0.0f;
String str = String.valueOf(f);
String str1 = f + "";
String str2 = f.toString();

System.out.println(str);
System.out.println(str1);
System.out.println(str2);
这几种方法都是可以的。
参考技术A C语言和C++中有个<stdlib.h>的自带函数gcvt()来将浮点数转换成字符串、详情参见下方百度百科
http://baike.baidu.com/link?url=s8ALq_iHdgqcUlehr5w3ViAlQ3CcTJA6kVKCrcHAJQzPyYgsJAworRCglNKc-B8QxkW6ZSFENmP8MfZdXv9Q9_

java里有一个String.valueOf()来实现你所述的功能、详情见下方博客
http://www.cnblogs.com/zhangjs8385/archive/2011/11/04/2236527.html
参考技术B 什么语言的?

以上是关于python中无法将string转化为float是啥原因,该怎样解决呢?的主要内容,如果未能解决你的问题,请参考以下文章

java怎么将FLOAT类型转化为STRING

python中如何把string 转换成int

如何将int型转化成boolean型

python中怎么把string转换成int

java 怎么用float怎么转化为String

如何将int型转化成boolean型