首页 > 解决方案 > 使用 pandas 读取 csv 文件时如何转换数据类型?

问题描述

我想使用 pandas 将 foo.csv 导出到我的数据库。我使用 sqlalchemy 来操作 sqlite,并声明一个模型,就像以下代码一样:

class House:
 __table__name='house'
    id=db.Column(db.Integer,index=True,primary_key=True)
    city=db.Column(db.String(128),index=True,default="")

当我尝试使用 pandas.read_csv 来处理它时——这里有一个例子:df=pd.read_csv('path/foo.csv',error_bad_lines=False)我收到一个错误:

sqlite3.IntegrityError: datatype mismatch

熊猫似乎将数据读取为字符串。我还搜索了转换数据类型的解决方案。它确实有帮助,但仍然无法解决我的问题,因为它发生了:

     File "pandas/_libs/parsers.pyx", line 1173, in pandas._libs.parsers.TextReader._convert_tokens
    TypeError: Cannot cast array from dtype('O') to dtype('int64') according to the rule 'safe'
    ValueError: invalid literal for int() with base 10

这是我尝试过的代码:

import pandas as pd

col_names=pd.read_csv('path/foo.csv',error_bad_lines=False,nrows=0).columns
type_dict={'price':int,'id':int}
type_dict.update({col:str for col in col_names if col not in type_dict})
con=sqlalchemy.create_engine(Config.SQLALCHEMY_DATABASE_URI,echo=True)
df=pd.read_csv('path/foo.csv',error_bad_lines=False,dtype=type_dict)
df.to_sql(name='house',con=con,if_exists='append',index=False)

注意:我知道有一个类似的问题。但我看不出它可以帮助解决这个问题。我想知道如何解决这个问题,或者还有其他一些不错的方法可以将 csv 导出到数据库吗?

添加了我的部分数据:

id,title,unit,price,latitude
1, US Fut town, 501#2,500,31.199851740354852

标签: pythonpandascsvsqlalchemy

解决方案


推荐阅读