2016-04-13 29 views
2

Farklı sütun adlarına sahip bir sqlite veritabanı ve dataframe'im var ama aynı şeyle ilgili. Örneğin.Bir pandalar veri çerçevesini farklı sütun adlarıyla sqlite'ye kaydetme?

  1. Veritabanımın Otomobillerinde Araç Kimliği, Adı ve Fiyatı vardır.

  2. Veritabanım df araçta Identity, Value ve Name bulunuyor.

Ek: Ben de df orada değil veritabanında ek 'tarihi' sütun ekleyin ve tarih dayanarak eklemek istiyorum.

ben veritabanında df kaydetmek istiyorum böylece Yani Id = Identity, Price = Value, Name = Name ve date = something specified by the user or current

yapamam olağan df.to_sql (i sütun adlarını yeniden adlandırabilir, ancak daha iyi bir olup olmadığını merak ediyorum sürece)

bunu yapmanın yolu yukarıda çalışmak ve bana bağlayıcı yanlış olduğunu bir hata verir vermez, ancak sadece tarih sütununda cur.execute("INSERT INTO Cars VALUES(?,?,?)",df.to_records(index=False))

olmaksızın isimlerin senkronize ilk çalıştı. Ayrıca, DB ve DF'deki sütunların sırası farklı

Farklı tarih sütununun bulunduğu bölümle nasıl başa çıkılacağından bile emin değilim, bu nedenle herhangi bir yardım büyük olacaktır. Aşağıda tüm değerleri oluşturmak için örnek bir kod bulunmaktadır.

import sqlite3 as lite 

con = lite.connect('test.db') 

with con: 

    cur = con.cursor()  
    cur.execute("CREATE TABLE Cars(Id INT, Name TEXT, Price INT, date TEXT)") 
    df = pd.DataFrame({'Identity': range(5), 'Value': range(5,10), 'Name': range(10,15)}) 

cevap

0

Sen yapabilirsiniz:

cur.executemany("INSERT INTO Cars (Id, Name, Price) VALUES(?,?,?)", list(df.to_records(index=False)))

yanı sıra, numpy.int32 olarak dataframe ait dtype niteliğini belirtmelidir 'Arabalar'

con = sqlite3.connect('test.db') 
cur = con.cursor() 

cur.execute("CREATE TABLE Cars(Id INT, Name TEXT, Price INT, date TEXT)") 
df = pandas.DataFrame({'Identity': range(5), 'Value': range(5,10), 'Name': range(10,15)}, dtype=numpy.int32) 

cur.executemany("INSERT INTO Cars (Id, Price, Name) VALUES(?,?,?)", list(df[['Identity', 'Value', 'Name']].to_records(index=False))) 

query ="SELECT * from Cars" 
cur.execute(query) 
rows= cur.fetchall() 
for row in rows: 
    print (row) 
+0

Çalışıyor tablonun kısıtlamayı karşılamak için ama ondan okumaya devam edersem onu ​​okuyacağım: (b '\ x00 \ x00 \ x00 \ x00', b '\ x05 \ x00 \ x00 \ x00', b '\ n \ x00 \ x0 0 \ x00 ',' tarih ') (b' \ x01 \ x00 \ x00 \ x00 ', b' \ x06 \ x00 \ x00 \ x00 ', b' \ x0b \ x00 \ x00 \ x00 ',' tarih ') (b '\ x02 \ x00 \ x00 \ x00', b '\ x07 \ x00 \ x00 \ x00', b '\ x0c \ x00 \ x00 \ x00', 'tarih') (b '\ x03 \ x00 \ x00 \ x00 ', b' \ x08 \ x00 \ x00 \ x00 ', b' \ r \ x00 \ x00 \ x00 ',' tarih ') (b' \ x04 \ x00 \ x00 \ x00 ', b '\ t \ x00 \ x00 \ x00', b '\ x0e \ x00 \ x00 \ x00', 'date') – CoderBC

+0

bunlar, hex'te ascii karakterleridir. sqlite'daki verileri nasıl depoladınız ve okudunuz? –

+0

Sadece yukarıdaki kodu – CoderBC

İlgili konular