我正在尝试执行以下操作:
我的目标是从pandas数据框中获取我们的SQL服务器数据库中不存在的记录(行)
我试过这样做:
使用以下内容从我的SQL数据库中获取“Isbn13”数字列表到pandas。
extension Dictionary {
var jsonData: Data? {
return try? JSONSerialization.data(withJSONObject: self)
}
}
然后使用此列表,将其与pandas数据帧进行比较ISBN-13值将消除已存在于我们数据库中的值。 但是,当我运行这个。我得到了,我认为列表清单如下
let dictionary = ["http://www.somehost.com":
["some_name", "some_pass", "date_modification", "other_stuff"]]
if let jsonData = dictionary.jsonData {
print(String(data: jsonData, encoding: .utf8) ?? "") // {"http:\/\/www.somehost.com":["some_name","some_pass","date_modification","other_stuff"]}
do {
let dictionaty = (try JSONSerialization.jsonObject(with: jsonData)) as? [String:[String]]
print(dictionary) // ["http://www.somehost.com": ["some_name", "some_pass", "date_modification", "other_stuff"]]
} catch {
print(error)
}
}
我的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()
并且会包含isbn13_list[1:4]
[(u'9780004707631', ), (u'9780004812595', ), (u'9780006485131', )]
当我运行以下程序来获取新值时,我们的数据库没有出现,我得到了所有错误的值(我检查过我应该减少200个值)
Name: ISBN-13, Length: 821, dtype: float64
我做错了什么?另外,我应该将我的df中的ISBN-13转换为int还是其他任何东西?
答案 0 :(得分:0)
我收到了,我认为是列表
没有。 fetchall()
返回pyodbc.Row
个对象的列表。如果您想要一个真实的float
值列表来过滤您的数据帧,那么您需要将Row
个对象列表转换为float
值列表,如下所示:
isbn13_rows = cursor.fetchall() # [(u'9780004707631', ), (u'9780004812595', ), ...
isbn13_list = [float(x[0]) for x in isbn13_rows] # [9780004707631.0, 9780004812595.0, ...
(顺便说一句,如果您的数据框将ISBN存储为字符串而不是浮点值,那可能会更好。)
答案 1 :(得分:0)
这是我能够做到的解决方法。我以前尝试过的都很快。它可能不是最佳的,所以很抱歉。
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 = pd.DataFrame.from_records(cursor.fetchall(),columns=['isbn13'])
isbn13_list = isbn13_list['isbn13'].astype('int64')
Final_df = condition_df[~condition_df['ISBN-13'].isin(isbn13_list)]