【分析工具】Python之Pandas01

 

目录

2.1快速入门

2.2 Series

2.2.1基本知识

2.2.1.1属性:

2.2.1.2方法

2.2.1.3缺失值的检测

2.2.2Series的创建

2.2.2.1列表方式的创建

2.2.2.2字典方式创建

2.2.3切片和索引

2.2.3.1索引

2.2.3.2切片

2.2.4Series的运算

2.3DataFrame

2.3.1创建

2.3.2索引

2.3.2.1一级索引

2.3.2.2二级索引

2.3.3切片

2.3.4各种数据类型之间的转换

2.3.5DataFrame的运算函数

2.4广播机制

2.4.1Series

2.4.3DataFrame

2.5数据的读取和保存

2.6Pandas与SQL的对比


2.1快速入门

pandas是Python的核心数据分析库,强大,灵活,可以支持任何语言的开源数据包。简单直观的处理关系型和标记型数据。pandas速度很快,很多底层的算法都是用Cython优化过的。pandas处理以下类型的数据:

  • 与 SQL 或 Excel 表类似的,含异构列的表格数据;
  • 有序和无序(非固定频率)的时间序列数据;
  • 带行列标签的矩阵数据,包括同构或异构型数据;
  • 任意其它形式的观测、统计数据集, 数据转入 Pandas 数据结构时不必事先标记。

pandas主要的数据结构是Series和DataFrame,这两种数据结构足以处理金融,统计和社会科学以及工程等领域里的大多数典型用例。适用于:

  • 可以处理SQL,Excel类似的表格数据
  • 有序和无序的时间 序列数据
  • 带标签的矩阵数据

导包方式

from pandas import Series,DataFrame
import pandas as pd
import numpy as np

和其他语言的对比

Pandas和SQL的比较:

  • selec---切片
  • from---join、merge、concat、append
  • where---query
  • group by--groupby
  • having---apply()、transform、max等
  • order by--sort——values()、sort_index()

2.2 Series

2.2.1基本知识

Series就是一个定长的有序字典,通过shape、size、index、value等得到相关属性。

2.2.1.1属性:

  • s.size:获取大小
  • s.shape:获取形状
  • s.index:获取索引
  • s.values:获取值
  • s.name:对象的名字

2.2.1.2方法

  • s.head()   # 获取前5个数据
  • s.tail()  # 获取后5个数据

2.2.1.3缺失值的检测

当索引没有对应的值时,可能出现缺失数据的情况,显示NaN.Python自带检测方式:

  • s.isnull()
  • s.notnull()

检测是否有缺失值,pandas自带的

  • pd.isnull(s)
  • pd.notnull(s)

2.2.2Series的创建

2.2.2.1列表方式的创建

pd1=pd.Series(
    data=['关羽','张飞','赵云','韩信'],
    index=list('abcd'),
    name='三国',
)

2.2.2.2字典方式创建

df1=pd.Series({'name':'Marry','age':22,'gender':'male'})

2.2.3切片和索引

2.2.3.1索引

  • s.loc['index']根据索引进行获取,与s['索引']具有相同的功能.
  • s.iloc[行号]根据行号进行获取,与s[0]具有相同的功能

2.2.3.2切片

  • s.loc['a':'c']根据index进行的切片,与s['a':'c']具有相同的功能.
  • s.iloc[1:3]根据行号进行切片,与s[1:3]具有相同的功能

注意:iloc是通过隐式索引和切片进行数据的获取的,而loc是通过显式索引进行数据的获取的,而普通的方括号,无论是显式索引还是隐式索引都是可以的.

2.2.4Series的运算

1.加法运算

适用于numpy中的运算在Series中也是适用的,Series之间的运算在运算中自动对齐不同索引的数据,如果索引不对应,那么就补NaN。

a={
    'username':'gfb',
    'age':22,
    'u_id':'201607020101'
}
b={
    'username':'txl',
    'age':22,
    'gender':'female'
}
A=pd.Series(a)
B=pd.Series(b)
C=A+B
display(C)

age             44
data           NaN
gender         NaN
u_id           NaN
username    gfbtxl
dtype: object

结论:使用加号运算

  • a有值b没有值那么返回NaN
  • a和b都有值,如果是字符串则拼接,如果是数值类型那么相加
  • 如果我们想要将合并的空值填充,可以使用A.add(B,fill_value=0)进行运算.

2.Series、numpy、list互转

3.Series的广播运算

s[::2]+10和s[::2].add(10)具有相同的功能

4.提取满足条件的值

s=pd.Series([1,2,3,4])
cond=s<3
s[cond]

5.常用函数

  • s.mean()  均值
  • s.median()  中位数
  • s.count()  统计计数
  • s.argmax()  取出最大值的下标
  • s.idxmax()  取出最大值的下标
  • s.add_prefix('pre_') 为索引添加前缀
  • s.add_suffix('_suf') 为索引添加后缀

2.3DataFrame

2.3.1创建

矩阵方式创建

df=DataFrame(
    data=np.random.randint(0,150,size=(10,4)),
    index=list('abcdefhijk'),
    columns=['Python','Java','C++','C'],
    dtype=np.int16,
    copy=True
)

字典方式创建

dict1={
    '姓名':['关羽','张飞','曹操'],
    '年龄':[23,34,43],
    '性别':['男','男','女']
}
df1=DataFrame(data=dict1,index=list('abc'))

2.3.2索引

Series可以理解成带索引的数据,而DataFrame是表格结构的数据

2.3.2.1一级索引

一级索引获取到的是Series类型的数据.

获取单列

  • df.Python
  • df['Python'][1:3]

获取单行

  • df.loc['a']
  • df.iloc[2]
  • df.ix['a']
  • df.ix[2]

2.3.2.2二级索引

获取到的是DataFrame类型的数据.

获取行和列

  • df[['Python','Java']].iloc[[1,4,5,6]]  先获取多列再获取多行
  • df.loc[['a','b','c']][['Python','Java']]  先获取多行再获取多列
  • df.loc[['a','b','c']]  获取多行   与iloc或者ix这两个函数有相同的功能
  • df[['Python','Java']]  获取多列

2.3.3切片

和索引操作的不同,索引操作是先从列开始算再是行获取,但是切片操作是先从行开始再从列开始,切片操作使用一个括号获取的直接就是DataFrame,和Numpy中的矩阵操作比较类似.

  • df['a':'g']切取多行

如果想要在切取行的时候还切取列,我们可以使用函数loc,iloc和ix等

  • df.loc['a':'g','Python':'PHP']  使用iloc和ix也能发挥同样的功能.

注意:切记直接使用一个括号进行的是切片操作,

2.3.4各种数据类型之间的转换

2.3.5DataFrame的运算函数

我们对DataFrame的运算其实基本上都是对Series的运算,因为如果我们想改变DataFrame中某些行或者列的值,我们通过括号取出的却是Series的类型,因此我们对DataFrame的运算基本都是对Series的操作。

统计函数

  • df['平均分'].count()
  • df['平均分'].min()
  • df['平均分'].max()
  • df['平均分'].mean()
  • df['平均分'].median()
  • df['平均分'].std()
  • df['平均分'].argmax()
  • df['平均分'].unique()
  • df['平均分'].add_prefix('pre_')
  • df['平均分'].add_suffix('_suf')
  • df['平均分'].map(lambda x : x+ 100)
  • df['c'][2]=np.nan
  • df.info()  # 查看数据的基本信息
  • df.describe()  # 查看数据的统计情况

排序函数

  • series.sort_values(axis=0)  # 按照值进行排序
  • series.sort_index(axis=0)  # 按照索引进行排序
  • df.sort_index()  根据索引进行排
  • df.sort_values(by='b')  # 根据指定的值进行排序
  • df.sort_values(by=1, axis=1)  # 指定值,指定维度进行排序

2.4广播机制

2.4.1Series

Series和数字进行计算

pd.Series(np.array([1,2,3]))+10

Series之间是没有广播的,因为Series是自带索引的,索引是它的唯一辨识。如果Series的长度不一致或者索引没有对应的时候,我们可以使用pandas提供的方法进行运算,索引不对齐的地方用fill_value进行填充.

pd.Series([1,2,3])+pd.Series([1,2,3,4])

s1=pd.Series(np.array([1,2,3]))
s2=pd.Series(np.array([4,5,6,7]))
s1.add(s2,fill_value=0)

2.4.3DataFrame

1】和数值进行运算

pd.DataFrame(
    data=np.random.randint(0,10,size=(2,3)),
    columns=['Python','Java','C']
)+10

2】DataFrame之间的加法没有广播,对应位置相加,如果没有对应上,那么就会是NaN.add方法,如果有空的位置,就用指定的值进行填充。

df1.add(df2,fill_value=0)

2.5数据的读取和保存

数据读取和写入的时候首先我们要安装openpyxl和xlrd包。

csv文件数据的读取和保存:短网址生成器

df=pd.read_csv('http://suo.im/6ja5G4')
df.to_csv('./1.csv')

将数据写入数据库

# 首先应该安装这两个包
# pip install mysqlclient
# pip install sqlalchemy

# 创建连接数据库的引擎
engine = sqlalchemy.create_engine('mysql+mysqldb://softpo:root@localhost/dushu?charset=utf8')

# 直接写入,不添加主键,会报警告
df2.to_sql('book211',engine,index=False)

存入数据的同时添加主键

# 修改了主键,增删改查都可以
# unsigned int8 - 128 ~ 127 无符号 0 ~ 255
with engine.connect() as conn:
    conn.execute('alter table book985 change id id int unsigned not null auto_increment primary key;')
with engine.connect() as conn:
    df = conn.execute('select * from book985 limit 100')
for i in df:
    print(i)

数据库中数据的读取

import pymysql
conn = pymysql.connect(host = 'localhost',port = 3306,database = 'dushu',user = 'softpo',
                password = 'root',charset = 'utf8')  # 连接
df  = pd.read_sql('select * from books',conn)  # 读取数据

数据库中数据的查询

df.query("book_name == '主人的溃败'")  # 精确查询
df2 = df.query("book_name.str.contains('的')")  # 模糊查询

2.6Pandas与SQL的对比

  • select--切片
  • from--join,merge,concat,append
  • where--query
  • group by---groupby
  • having---apply(),transform(),max()
  • orderby---sort_values(),sort_index()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值