程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Pandas(五)—— 分類數據、讀取數據庫

編輯:Python

Python模塊 —— Pandas

  • Pandas(五)—— 分類數據、讀取數據庫
    • 九、分類數據
      • 9.1 cat對象
      • 9.2 有序分類
      • 9.3 區間類別
        • 9.3.1 利用cut和qcut進行區間構造
        • 9.3.2 一般區間的構造
    • 十、讀取數據庫
      • 10.1 連接數據庫
      • 10.2 read_sql

Pandas(五)—— 分類數據、讀取數據庫

大家可以關注知乎或微信公眾號的share16,我們也會同步更新此文章。

九、分類數據

9.1 cat對象

在pandas中提供了category類型,使用戶能夠處理分類類型的變量,將一個普通序列轉換成分類變量可以使用astype方法;

import pandas as pd
df = pd.DataFrame([['A',19,120],['B',20,128],['C',19,115]],columns=['name','age','score'])
s = df.score.astype('category')
''' 屬性 '''
ls1 = ['s的數據類型','類似於type','以Index類型存儲','是否有序','賦予編號(取決於cat.categories中的順序)']
ls2 = ['s.dtype','s.cat','s.cat.categories','s.cat.ordered','s.cat.codes']
print('\033[1;31m···cat對象的屬性···\033[0m')
for i,j in zip(ls1,ls2):
print('{}({})的運行結果:\n{}\n'.format(j,i,eval(j)))
''' 增刪改 '''
ls3 = ['增','刪(若不存在,返回錯誤)','刪除未出現在序列中的類別','改','set']
ls4 = ['s.cat.add_categories(90)','s.cat.remove_categories(115)','s.cat.remove_unused_categories()',\
's.cat.rename_categories({115:135})','s.cat.set_categories([115,120])']
print('\033[1;31m···cat對象的增刪改查···\033[0m')
for i,j in zip(ls3,ls4):
print('{}({})的運行結果:\n{}\n'.format(j,i,eval(j)))




9.2 有序分類

有序類別和無序類別:可通過s.cat.as_unordereds.cat.reorder_categories互相轉化,需注意的是後者傳入的參數必須是由當前序列的無序類別構成的列表,不能夠增加新的類別,也不能缺少原來的類別,並且必須指定參數ordered=True,否則方法無效。
排序/大小:排序sort_index()、sort_values();大小>=、==等;

9.3 區間類別

9.3.1 利用cut和qcut進行區間構造

pd.cut(series,bins,right,labels,retbins,precision,include_lowest,duplicates,ordered)

pd.qcut(series,q,labels,retbins,precision,duplicates)

  • bins:可為int/序列; q:可為int/列表(由浮點數組成),即分位數;
  • labels:返回的bin的標簽;默認None,還可為False/數組;若為True,則引發錯誤;

9.3.2 一般區間的構造

pd.Interval(left,right,closed)

  • 參數left和right必須是同一類型,且要滿足left <= right;
  • closed:默認right,還可取值left、both、neither;

pd.IntervalIndex 對象有四類方法生成,分別是from_breaks、from_arrays、from_tuples、interval_range;

  • from_breaks:類似於cut/qcut函數,區別是:cut/qcut是通過計算得到的分割點,而from_breaks是直接傳入自定義的分割點;
  • from_arrays:是分別傳入左端點和右端點的列表,適用於有交集並且知道起點和終點的情況;
  • from_tuples:傳入的是起點和終點元組構成的列表;
  • interval_range:由參數start、end、periods、freq構成;

十、讀取數據庫

10.1 連接數據庫

  1. 導入模塊 pymysql;
  2. 相關代碼(建立連接、創建游標、執行sql查詢、獲取數據、關閉連接):
import pymysql
''' 1.建立連接 '''
conn = pymysql.connect(host='localhost', # 還可以是'127.0.0.1'
user='用戶名',password='密碼',
database='庫名',port=3306,
charset='utf8')
''' 2.創建游標 '''
cur = conn.cursor()
''' 3.執行sql查詢 '''
cur.execute('mysql語句') # 必須要有此句,否則data執行錯誤
''' 4.獲取數據 '''
data = cur.fetchall()
# 此外還可為fetchmany(size)、fetchone();
# 以元組形式返回,表中每一行又是一個小元組;
# 每次更新execute中的語句時,其後面的一系列如data等,也要進行更新;
# 若要執行‘增刪改更新’,要有conn.commit(),提交到數據庫執行;
''' 5.關閉 '''
cur.close()
conn.close()

10.2 read_sql

  1. 導入模塊 sqlalchemy.create_engine、pandas;
  2. 相關連接,如下;
import pandas as pd
from sqlalchemy import create_engine
engine = create_engine('mysql+pymysql://用戶名:密碼@ip:端口/庫名?charset=utf8')
sql = 'mysql語句'
df = pd.read_sql(sql,engine)
df.head()

謝謝大家


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved