Pandas(五)—— 分类数据、读取数据库

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
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值