pandas獲取Mysql數據的用法

利用Pandas獲取Mysql數據

在python中操作mysql,雖說方便,但是頻繁的從服務器獲取數據,效率是很低的。今天嘗試了一下用pandas從Mysql數據庫中提取數據,確實很方便,而且獲取一次數據以後,利用pandas豐富的函數進行各種分析,也是得心應手。

  1. 首先建立數據庫連接,建立一個公用的conn作爲連接對象
import pymysql
import pandas as pd
class cardb():
    conn = None

    def connect_db(self):
        db_host = "XXXX"
        user = "XXXX"
        pw = "XXXX"
        try:
            # 創建連接數據庫
            self.conn = pymysql.connect(db_host, user, pw, "yiche_car_info", use_unicode=True, charset='utf8mb4')
            return self.conn
        except Exception as e:
            print("數據庫連接異常!錯誤%s", e)
            return None
  1. pandas利用建立的連接獲取數據
 try:
            self.conn.ping(reconnect=True)
        except Exception as e:
            print("%s" % e)
            return None
            sql=“select * from viewcarinfo”
        df = pd.read_sql_query(sql % (str_info, str_viewname), con=self.conn)
        print(df)

得到了數據,是一個dataframe格式。一行一行的索引稱爲index,一列列則是column像表格。

       pz_id cartype_id              pz_name  ...    車型級別 車身型式    前大燈
0    m139120      m4758       2020款1.2L手動超值版  ...     小型車   兩廂     鹵素
1    m111122      m2790         2014款1.3L標準版  ...     小型車   三廂     鹵素
2    m133807      m3067       2019款1.5L手動進取版  ...     小型車   三廂    LED
3    m133409      m4758      2019款1.2LAMT舒適版  ...     小型車   兩廂     鹵素
4    m139423      m3167       2020款1.4L手動煥新版  ...     小型車   三廂     鹵素
..       ...        ...                  ...  ...     ...  ...    ...
343  m129677      m4586  2018款5.3L手自一體白宮一號4座  ...  全尺寸SUV  SUV    LED
344  m136613      m3859      2020款6.0TW12標準版  ...     豪華車   三廂    LED
345  m131852      m4373       2019款S680雙調典藏版  ...     豪華車   三廂  矩陣LED
346  m132800      m2078    2019款GT6.0TW12敞篷版  ...     豪華車  敞篷車  矩陣LED
347  m125538      m3044    2017款6.8T手自一體長軸距版  ...     豪華車   三廂     氙氣
  1. 先用python建立好需要保存的json字典
 json_res = {}
        json_res["item_name"] = []
        json_res["item_option"] = {}
        json_res["item_value"] = []
        json_res["car_prosys_name"] = car_prosys_name
        json_res["car_prosys_value"] = []
        json_res["car_prosys_series_value"] = []
        json_res["car_pricezone_name"] = car_pricezone_name
        json_res["car_pricezone_value"] = []
        json_res["car_pricezone_series_value"] = []
  1. 用pandas分析數據
    數據查詢的用法:df.loc是定位數據行,加上條件就可以實現數據過濾。
    A.相等過濾或者數據大小過濾
item="鹵素"
item1 = df.loc[df["前大燈"] == item]  

等於==,大於小於<,>可以篩選出所有相等的或者數值上滿足大小條件的數據行。
n1 = item1[str_feild].count()
統計出所有前大燈==“鹵素”的行數。

B.文本模糊查找過濾
而文本的模糊查找則可以利用.str.contains這個函數

item="鹵素"
item2 = df.loc[df["前大燈"].str.contains(item)]

可以統計出所有所有與鹵素相關的數據行。

n2 = item2[str_feild].count()

C.聯合條件查找
統計出所有前大燈包含“鹵素”的行數。
還可以聯合2個以上條件查找,如"&"是 and的效果,而“|”是 or的效果。

item3 = df.loc[(df[str_feild] == item) & (df[prosys_name] == ps_name)]
n3 = item2[str_feild].count()

統計同時滿足df[str_feild] == item以及df[prosys_name] == ps_name)的數據列。

  1. 導出字典爲json格式,可用於flask,Django的數據源。
 save_path = sys.path[0] + json_path + str_feild_id + ".json"
        with open(save_path, 'w') as wr:
            json.dump(json_res, wr)
  1. 用pandas分析數據
    pandas起始還有很多用法,可以說是numpy的升級版,numpy更多用於數組和矩陣,而pandas更多用於
    類似excel和sql的高級數據處理,也可以直接與數據庫對接,並且還有多種格式的接入和導出(常見的
    如csv,excel,json),可以說一大數據處理利器。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章