pandas 作為數(shù)據(jù)分析處理的強(qiáng)大工具西采,不僅具有幾乎所有 sql 語(yǔ)句所能擁有的功能,如:join鞠柄、group by侦高、order by 等等,同時(shí)兼具完備的數(shù)據(jù)分析功能厌杜;
并且 pandas 獲取數(shù)據(jù)后奉呛,是在內(nèi)存中進(jìn)行數(shù)據(jù)處理,效率會(huì)遠(yuǎn)高于數(shù)據(jù)庫(kù)查詢操作夯尽,尤其是在多表 join 操作中瞧壮,相應(yīng)的 pandas merge 操作性能會(huì)非常優(yōu)越
本篇介紹如何使用 pandas dataframe 替換 django QuerySet 及 sqlalchemy ORM Query
一、pandas dataframe 替換 django orm QuerySet
字典類型的 QuerySet 能夠轉(zhuǎn)換成 df匙握,即 orm.objects.filter().values() 的返回值咆槽,將這個(gè)返回值轉(zhuǎn)成 list
然后使用 pd.Dataframe()
如:
import pandas as pd
from django.contrib.auth.models import User
user_q = User.objects.all()
user_df = pd.DataFrame(list(user_q.values('username','password')))
jupyter 上結(jié)果如下(jupyter 操作 django 參考上篇linux 利用 miniconda 搭建 jupyter notebook 開發(fā)環(huán)境(二)--Django):
二、pandas dataframe 替換 sqlalchemy orm Query
1圈纺、建 sqlalchemy orm
這里反射 auth_user 表
from django.conf import settings
from utils.db_helper import get_db_url_engin
from sqlalchemy.ext.automap import automap_base
BaseAuto = automap_base()
engine = get_db_url_engin(settings.DJANGO_DATABASE_URL)
BaseAuto.prepare(engine, reflect=True)
User = BaseAuto.classes.auth_user
2秦忿、建立session
import sqlalchemy as sa
from sqlalchemy.orm import sessionmaker
db_url = settings.DJANGO_DATABASE_URL
session = sessionmaker(bind=sa.create_engine(db_url))()
3、查詢
使用 pd.read_sql()蛾娶,傳入 session.query().statement 和 session.query().bind 兩個(gè)參數(shù)灯谣,進(jìn)行轉(zhuǎn)換
import pandas as pd
user_q = session.query(User.username,User.password)
user_df = pd.read_sql(user_q.statement, user_q.session.bind)
結(jié)果同上
總結(jié)
使用 pandas dataframe 替換 django 及 sqlalchemy ORM Query 后即可使用 pandas 進(jìn)行相應(yīng)數(shù)據(jù)的分析和操作了