在pandas中将numpy.int64转换为python int
我有一个excel文件和一张表格。它包含两列num1和num2,它们都有整数值。我正在尝试使用Sqlalchemy和pandas提取这些数据并将其插入Mysql数据库在pandas中将numpy.int64转换为python int,python,pandas,dataframe,sqlalchemy,Python,Pandas,Dataframe,Sqlalchemy,我有一个excel文件和一张表格。它包含两列num1和num2,它们都有整数值。我正在尝试使用Sqlalchemy和pandas提取这些数据并将其插入Mysql数据库 from sqlalchemy import create_engine, MetaData,Column,Integer from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker,validate
from sqlalchemy import create_engine, MetaData,Column,Integer
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker,validates
import pandas as pd
Base = declarative_base()
connection_string = # give your connection string here
engine= create_engine(connection_string)
Base.metadata.bind = engine
s = sessionmaker()
session = s()
class a(Base):
__tablename__ = 'a'
id = Column(Integer,primary_key=True)
num1 = Column(Integer)
num2 = Column(Integer)
a.__table__.create(checkfirst=True)
excel_sheet_path = # give path to the excel sheet
sheetname = # give your sheet name here
df = pd.read_excel(excel_sheet_path,sheetname).transpose()
dict = df.to_dict()
for i in dict.values():
session.add(a(**i))
session.commit()
这段代码给了我一个属性错误
AttributeError: 'numpy.int64' object has no attribute 'translate'
因此,在将dataframe转换为dictionary之前,我尝试了许多函数,如astype、to_numeric,以将数据类型更改为普通的python int,但它们根本不起作用。只有当数据帧具有所有整数值时,问题才会持续存在。如果至少有一个列的类型为string或date,则程序工作正常。我如何解决这个问题 这也有问题。
我最终找到了一个有点不熟练的解决方案,如下所示:
def trans(data):
"""
translate numpy.int/float into python native data type
"""
result = []
for i in data.index:
# i = data.index[0]
d0 = data.iloc[i].values
d = []
for j in d0:
if 'int' in str(type(j)):
res = j.item() if 'item' in dir(j) else j
elif 'float' in str(type(j)):
res = j.item() if 'item' in dir(j) else j
else:
res = j
d.append(res)
d = tuple(d)
result.append(d)
result = tuple(result)
return result
但是,当处理具有大量行的数据时,它的性能很差。您将花几分钟时间翻译一个包含100000条以上记录的数据帧。一篇有点相关的帖子:是的。我正在使用PyMySql如何解决此错误?