我有一个用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
?
答案 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)
,因为它似乎绕过了转换尝试,并且不需要编辑表。