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),可以说一大数据处理利器。
发布了14 篇原创文章 · 获赞 6 · 访问量 1353

猜你喜欢

转载自blog.csdn.net/qq_43662503/article/details/104679163
今日推荐