web-dev-qa-db-fra.com

Comment ouvrir et convertir une base de données sqlite en pandas dataframe

J'ai téléchargé des données sous forme de base de données sqlite (data.db) et je souhaite ouvrir cette base de données en python, puis la convertir en pandas dataframe.

C'est jusqu'ici j'ai fait

import sqlite3
import pandas    
dat = sqlite3.connect('data.db') #connected to database with out error
pandas.DataFrame.from_records(dat, index=None, exclude=None, columns=None, coerce_float=False, nrows=None)

Mais sa jeter cette erreur

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/pandas/core/frame.py", line 980, in from_records
    coerce_float=coerce_float)
  File "/usr/local/lib/python2.7/dist-packages/pandas/core/frame.py", line 5353, in _to_arrays
    if not len(data):
TypeError: object of type 'sqlite3.Connection' has no len()

Comment convertir la base de données sqlite en pandas dataframe

16
Eka

Bien que sqlite fasse partie de la bibliothèque standard Python et constitue une interface simple et agréable pour les bases de données SQLite, le tutoriel Pandas indique:

Remarque Pour pouvoir utiliser read_sql_table (), vous devez disposer de SQLAlchemy dépendance facultative installée . http://pandas.pydata.org/pandas-docs/stable/io.html#reading-tables

Mais Pandas supporte toujours l’accès sqlite3 si vous voulez éviter d’installer SQLAlchemy:

import sqlite3
import pandas as pd
# Create your connection.
cnx = sqlite3.connect('file.db')

df = pd.read_sql_query("SELECT * FROM table_name", cnx)

Mais vous devez connaître à l'avance le nom de la table utilisée.

J'espère que ça aide!

http://pandas.pydata.org/pandas-docs/stable/io.html#sqlite-fallback

41
Mike

La ligne

dat = sqlite3.connect('data.db')

ouvre une connexion à la base de données. Il n'y a pas d'enregistrements interrogés jusqu'à présent. Vous devez donc ensuite exécuter une requête et la fournir au constructeur de la base de données pandas.

Il devrait ressembler à ceci

import sqlite3
import pandas as pd

dat = sqlite3.connect('data.db')
query = dat.execute("SELECT * From <DATABASENAME>")
cols = [column[0] for column in query.description]
results= pd.DataFrame.from_records(data = query.fetchall(), columns = cols)

Je ne suis pas vraiment ferme avec les commandes SQL, vous devriez donc vérifier l'exactitude de la requête. devrait être le nom de la table dans votre base de données.

5
RaJa

Rechercher sqlalchemy, engine et le nom de la base de données dans Google (sqlite dans ce cas):

import pandas as pd
import sqlalchemy

db_name = "data.db"
table_name = "LITTLE_BOBBY_TABLES"

engine = sqlalchemy.create_engine("sqlite:///%s" % db_name, execution_options={"sqlite_raw_colnames": True})
df = pd.read_sql_table(table_name, engine)
1
user3226167

j'ai stocké mes données dans le nom de la table database.sqlite est

import sqlite3
con=sqlite3.connect("database.sqlite")

data=pd.read_sql_query("SELECT * FROM Reviews",con)
print(data)
1
vignesh babu