从SQL数据库读取时,Pandas无法将字符串转换为float

时间:2016-05-08 08:55:03

标签: python pandas sqlalchemy

我有一个用SQLAlchemy创建的SQLite数据库,其格式如下

Code     Names              Amt1    Amt2   Amt3    Amt4
502      Real Management     11.4   1.3    -        -
5TG      80Commercial        85.8   152    4.845    4.12%
AZG      Equipment Love      11.6   117.1  -        -

但是当我尝试使用

将其读入pandas数据帧时

pandas.read_sql('sqlite_table', con=engine)

它返回错误ValueError: could not convert string to float: '-'

我认为大熊猫不能在Dataframe中注册-,但我该如何解决这个问题呢?是否可以将其作为-或其他内容读取0

2 个答案:

答案 0 :(得分:1)

使用Amt3更新-中的所有行(如果已设置登录身份验证和定义的游标)将是这样的:

cur.execute("UPDATE sqlite_table SET Amt3 = 0 WHERE Amt3 = '-'")

这似乎对我来说很好,即使是 - ,Atm3的类型是什么?

import pandas as pd
import sqlite3

con = sqlite3.connect(r"/Users/hugohonorem/Desktop/mytable.db") #create database

conn = sqlite3.connect('mytable.db') #connect to database
c = con.cursor() #set 

c.execute('''CREATE TABLE mytable
             (Code text, Names text, Atm1 integer, Atm2 integer, Atm3 integer, Atm4 integer)''')

c.execute("INSERT INTO mytable VALUES ('502', 'Real Management', '11.4', '1.3', '-' , '-')")
conn.commit()

因此我们复制了您的表格,现在我们可以删除您的-

c.execute("UPDATE mytable SET Atm3 = NULL WHERE Atm3 = '-'") #set it to null

df = pd.read_sql("SELECT * from mytable", con)
print df

这将为我们提供输出:

  Code            Names  Atm1 Atm2  Atm3 Atm4
   502  Real Management  11.4  1.3  None    -

但是,正如您所看到的,我可以检索Atm4-

的表格

答案 1 :(得分:0)

我知道这个问题很旧,但是最近我遇到了同样的问题,这是google上的第一个结果。解决我问题的方法只是将pandas.read_sql('sqlite_table', con=engine)更改为完整查询pandas.read_sql('SELECT * FROM sqlite_table', con=engine),因为它似乎绕过了转换尝试,并且不需要编辑表。