【发布时间】:2017-11-29 19:32:23
【问题描述】:
我正在尝试执行以下操作:
- 我有一个包含 20 列的 pandas 数据框“df”。 “ISBN-13”就是其中之一。
- 我们的 SQL Server 数据库“Book_records”有一个表,其“Isbn13”列包含类似于 Pandas 数据框中的“ISBN-13”的 ID。
我的目标是从我们的 SQL 服务器数据库中不存在的 pandas 数据框中获取记录(行)
我试过这样做:
使用以下命令将我的 SQL 数据库中的“Isbn13”数字列表导入 pandas。
cnxn = pyodbc.connect(driver='{SQL Server}', host=server, database=db1,trusted_connection=tcon)
cursor = cnxn.cursor()
cursor.execute("SELECT distinct(DBF.Isbn13) FROM Book_records as DBF")
isbn13_list = cursor.fetchall()
然后使用此列表,将其与 pandas 数据框 ISBN-13 值进行比较,消除那些已经存在于我们数据库中的值。 但是,当我运行它时。我得到了,我认为是一个列表列表如下
isbn13_list[1:4]
[(u'9780004707631', ), (u'9780004812595', ), (u'9780006485131', )]
我的 pandas 数据框列如下:Name: ISBN-13, Length: 821, dtype: float64 并且会有像 9780004707631.0 这样的元素
当我运行以下程序以获取未在我们的数据库中显示的新值时,我得到了所有错误的值(我检查了我应该少得到 200 个值)
Final_df = df[~df['ISBN-13'].isin(isbn13_list)]
我做错了什么?另外,我应该将我的 df 中的 ISBN-13 转换为 int 还是其他任何东西?
【问题讨论】:
-
检查您的数据类型,全部设为 str 或全部为 int
-
isbn13_list 是否正确输出以使其适用于 Final_df 代码?此外,它需要大量的时间来运行。是因为 isbn13_list 的方式吗?
标签: python sql-server pandas pyodbc