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
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
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.
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)
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)