Pandas是一个基于python中Numpy模块的一个模块

Python在数据处理和准备⽅⾯⼀直做得很好,但在数据分析和建模⽅⾯就差⼀些。pandas帮助填补了这⼀空⽩,使您能够在Python中执⾏整个数据分析⼯作流程,⽽不必切换到更特定于领域的语⾔,如R。与出⾊的 jupyter⼯具包和其他库相结合,Python中⽤于进⾏数据分析的环境在性能、⽣产率和协作能⼒⽅⾯都是卓越的。
pandas是 Python 的核⼼数据分析⽀持库,提供了快速、灵活、明确的数据结构,旨在简单、直观地处理关系型、标记型数据。pandas是Python进⾏数据分析的必备⾼级⼯具。
pandas的主要数据结构是 Series(⼀维数据)与 DataFrame (⼆维数据),这两种数据结构⾜以处理⾦融、统计、社会科学、⼯程等领域⾥的⼤多数案例处理数据⼀般分为⼏个阶段:数据整理与清洗、数据分析与建模、数据可视化与制表,Pandas 是处理数据的理想⼯具。
环境介绍
代码工具:jupyternotebook
python版本:python3.8.6
系统版本:win10
一、Pands安装 
  打开终端指令输入pip install -i https://pypi.doubanio.com/simple/ --trusted-host pypi.doubanio.com pandas
  
第⼆部分 数据结构
  第⼀节 Series
    ⽤列表⽣成 Series时,Pandas 默认⾃动⽣成整数索引,也可以指定索引
l = [0,1,7,9,np.NAN,None,1024,512]
# ⽆论是numpy中的NAN还是Python中的None在pandas中都以缺失数据NaN对待
s1 = pd.Series(data = l) # pandas⾃动添加索引
s2 = pd.Series(data = l,index = list('abcdefhi'),dtype='float32') # 指定⾏索引
# 传⼊字典创建,key⾏索引
s3 = pd.Series(data = {'a':99,'b':137,'c':149},name = 'Python_score')
display(s1,s2,s3)

   第⼀节 Dataframe    

    DataFrame是由多种类型的列构成的⼆维标签数据结构,类似于 Excel 、SQL 表,或 Series 对象构成的字典。
    

1 import numpy as np
2 import pandas as pd
3 # index 作为⾏索引,字典中的key作为列索引,创建了3*3的DataFrame表格⼆维数组
4 df1 = pd.DataFrame(data = {'Python':[99,107,122],'Math':[111,137,88],'En': [68,108,43]},# key作为列索引
5 index = ['张三','李四','Michael']) # ⾏索引
6 df2 = pd.DataFrame(data = np.random.randint(0,151,size = (5,3)),
7 index = ['Danial','Brandon','softpo','Ella','Cindy'],# ⾏索引
8 columns=['Python','Math','En'])# 列索引
9 display(df1,df2)

    

第三部分 数据查看
  查看DataFrame的常⽤属性和DataFrame的概览和统计信息
 1 import numpy as np
2 import pandas as pd
3 df = pd.DataFrame(data = np.random.randint(0,151,size=(150,3)),
4 index = None, # 行索引默认
5 columns=['A','B','C'])#列索引
7 df.head(10)#显示前十行 !!默认是五行!!
8 df.tail(10)#显示后十行
9 df.shape#查看行数和列数
10 df.dtypes#查看数据类型
11 df.index#查看行索引
12 df.value# 对象值,二维数组
13 df.describe()#查看数据值列的汇总统计,计数,平均值,标准差,最小值,四分位数,最大值
14 df.info()#查看列索引,数据类型,非空计数和内存信息

第四部分 数据的输入输出

  第一节csv


df = DataFrame(data = np.random.randint(0,50,size = [50,5]), # 薪资情况
columns=['IT','化⼯','⽣物','教师','⼠兵'])
#保存到相对路劲下文件命名为
df.to_csv('./salary.csv',
sep = ';',#分割符
header = True,#是否保存列索引
index = True)#是否保存行索引、
#加载
pd.read_csv('./salary.csv',
sep = ';',# 默认是逗号
header = [0],#指定列索引
index_col=0) # 指定⾏索引
#加载
pd.read_table('./salary.csv', # 和read_csv类似,读取限定分隔符的⽂本⽂件 sep = ';', header = [0],#指定列索引 index_col=1) # 指定⾏索引,IT作为⾏索引

   第⼆节 Excel

     pip install xlrd -i https://pypi.tuna.tsinghua.edu.cn/simple
     pip install xlwt -i https://pypi.tuna.tsinghua.edu.cn/simple
import numpy as np
import pandas as pd
df1 = pd.DataFrame(data = np.random.randint(0,50,size = [50,5]), # 薪资情况
columns=['IT','化⼯','⽣物','教师','⼠兵'])
df2 = pd.DataFrame(data = np.random.randint(0,50,size = [150,3]),# 计算机科⽬的考试成绩
columns=['Python','Tensorflow','Keras'])
# 保存到当前路径下,⽂件命名是:salary.xls
df1.to_excel('./salary.xls',
sheet_name = 'salary',# Excel中⼯作表的名字
header = True,# 是否保存列索引
index = False) # 是否保存⾏索引,保存⾏索引
pd.read_excel('./salary.xls',
sheet_name=0,# 读取哪⼀个Excel中⼯作表,默认第⼀个
header = 0,# 使⽤第⼀⾏数据作为列索引
names = list('ABCDE'),# 替换⾏索引
index_col=1)# 指定⾏索引,B作为⾏索引
# ⼀个Excel⽂件中保存多个⼯作表
with pd.ExcelWriter('./data.xlsx') as writer:
df1.to_excel(writer,sheet_name='salary',index = False)
df2.to_excel(writer,sheet_name='score',index = False)
pd.read_excel('./data.xlsx',
sheet_name='salary') # 读取Excel中指定名字的⼯作表
  第三节 SQL
    pip install sqlalchemy -i https://pypi.tuna.tsinghua.edu.cn/simple
    pip install pymysql -i https://pypi.tuna.tsinghua.edu.cn/simple

import pandas as pd
# SQLAlchemy是Python编程语⾔下的⼀款开源软件。提供了SQL⼯具包及对象关系映射(ORM)⼯具
from sqlalchemy import create_engine
df = pd.DataFrame(data = np.random.randint(0,50,size = [150,3]),# 计算机科⽬的考试
成绩
columns=['Python','Tensorflow','Keras'])
# 数据库连接
conn = create_engine('mysql+pymysql://root:12345678@localhost/pandas?
charset=UTF8MB4')
# 保存到数据库
df.to_sql('score',#数据库中表名
conn,# 数据库连接
 if_exists='append')#如果表名存在,追加数据
# 从数据库中加载
pd.read_sql('select * from score limit 10', # sql查询语句
conn, # 数据库连接
index_col='Python') # 指定⾏索引名

---------------------------------------------!!!!!!!!!第一次更新!!!!!!!!!!!----------------------------------------------------------

第五部分 数据的选取

  第一节 数据获取

!!!---先导入个数据---!!!
df = pd.DataFrame(data = np.random.randint(0,150,size = [10,3]),# 计算机科⽬的考试成绩
index = list('ABCDEFGHIJ'),# ⾏标签
columns=['Python','Tensorflow','Keras'])

df.Python# 查看所在列数据
df['Python']# 查看所在列数据
df[['Python','Keras']]#获取多列数据
df[1:3]#行切片操作 !!!--此处切片操作与数据的切片操作如出一辙--!!!

  使用 loc[] 进行数据获取 loc通过行列标签进行索引取数操作

1 df.loc[['A','B']]#选取行标签
2 df.loc[['A','B'],['Python','Keras']]#根据行列标签选取对饮数据
3 df.loc[:,['Python','Keras']]#保留所有行
4 df.loc[::2,['Python','Keras']]#每隔2行取出一行数据
5 df.loc['A',['Python','Keras']]#根据行标签选取出对应数据
6 #此处就不截图展示了

  使用 iloc[] 进行数据获取 iloc通过行列整数标签进行索引取数操作

df.iloc[2:4]#利用整数行切片操作与Numpy相似 !!!--此处切片操作与数据的切片操作如出一辙--!!!
df.iloc[1:3,1:2]#利用整数对行和列进行切片
df.iloc[1:3:]#行切片
df.iloc[:,0:1]#列切片

  Boolean索引

cond1 = df.Python > 100 # 判断Python分数是否⼤于100,返回值是boolean类型的Series
df[cond1] # 返回Python分数⼤于100分的⽤户所有考试科⽬数据
cond2 = (df.Python > 50) & (df['Keras'] > 50) # &与运算
df[cond2] # 返回Python和Keras同时⼤于50分的⽤户的所有考试科⽬数据
df[df > 50]# 选择DataFrame中满⾜条件的值,如果满⾜返回值,不然返回空数据NaN
df[df.index.isin(['A','C','F'])] # isin判断是否在数组中,返回也是boolean类型值

第六部分 数据集成

  第⼀节 concat数据串联

#再建立两个数据矩阵
df1 = pd.DataFrame(np.random.randint(1,151,size=10),
index = list('ABCDEFGHIJ'),
columns=['Science'])
df2 = pd.DataFrame(data = np.random.randint(0,150,size = [10,3]),
index = list('KLMNOPQRST'),
columns=['Python','Tensorflow','Keras'])
pd.concat([df,df2],axis=0)#df2串联拼接到df1下方
pd.concat([df,df1],axis=1)#df1串联拼接到df的左侧
df.append(df1) # 在df1后⾯追加df2

  第二节 插入

     insert()插入一列

    注意:如果使用insert()插入一列时,那么插入的这一列的长度必须和被插入的行数长度相等

#插入一列c++
df.insert(loc=1,
column='C++',
value=np.random.randint(0,151,size=(10))) df.insert(loc = 1,column='Python3.8,value=2048)

  第三节 数据的链接(join SQL风格)

    数据集的合并(merge)或连接(join)运算是通过⼀个或者多个键将数据链接起来的。这些运算是关系型数据库的核⼼操作。pandas的merge函数是数据集进⾏join运算的主要切⼊点。
#先建立两组数据
df1 = pd.DataFrame(data = {'sex':np.random.randint(0,2,size=6),'name':['九州','九周','Nineweek','Mrs佟','小A','小C']})
df2 = pd.DataFrame(data = {'score':np.random.randint(90,151,size=6),'name':['九州','九周','Nineweek','Mrs佟','小A','小Ming']})

    

pd.merge(df1,df2)
#(内连接) 在使用merge()合并中merge自动去除了空数据
pd.merge(df1,df2,how='left')#左链接
pd.merge(df1,df2,how='right')#右链接

---------------------------------------------!!!!!!!!!第二次更新!!!!!!!!!!!----------------------------------------------------------

第七部分 数据清洗

  第⼀节 duplicated筛选重复数据

    duplicated是以自上向下的顺序进行筛选如果行值相同就返回TRUE。

#创建一个分值数据
df2 = pd.DataFrame(data={'Name':['九州','Mrs佟','Nineweek',None,np.NAN,'Mrs佟'],'Sex':[0,1,0,1,0,1],'Score':[89,100,67,90,98,100]})

df2.duplicated()#检查重复值 以Boolean形式进行输出展示
df2.duplicated().sum()#打印有多少重复值
df2[df2.duplicated()]#打印重复值
df2[df2.duplicated()==False]#打印非重复值
df2.drop_duplicates()#删除重复值(此操作并不是在数据源本身进行删除操作)
df2.drop_duplicates(inplace=True)#删除重复值(此操作是在数据源本身进行删除操作)

  第二节 过滤空数据

df2.isnull()#检查是否存在空值(可以查到NAN值和None值)
df2.dropna(how = 'any') # 删除空数据(此操作并不是在数据源本身进行删除操作)
df2.dropna(how = 'any',inplace=True)# 删除空数据(此操作是在数据源本身进行删除操作)
df2.fillna(value='小A')#填充空数据(此操作并不是在数据源本身进行删除操作)
df2.fillna(value='小A',inplace=True)#填充空数据(此操作是在数据源本身进行删除操作)

  第三节 过滤指定行或列

del df2['Sex'] # 直接删除某列
df2.drop(labels = ['price'],axis = 1)# 删除指定列
df2.drop(labels = [0,1,5],axis = 0) # 删除指定⾏

  filter函数:选取保留的数据过滤其他数据

df2.filter(items=['Name', 'Score'])#保留‘Name’,‘Score’两列
df2.filter(like='S',axis = 1)# 保留列标签包含‘S’的列(axis=1表示列,axis=0表示行)
df.filter(regex='S$', axis=1)#正则方式进行筛选

第八部分 数据转换

  第一节 rename和replace的转换标签个元素

#改变行列索引
df2.rename(index = {0:10,1:11},columns={'Name':'StName'})#将行索引0换为10,1换为11;列索引Name换为StName
#替换元素值
df2.replace(100,102)#将所有的100替换为102
df2.replace([89,67],78)#将所有的89和67替换为78
df2.replace({'九州':'JZ',None:'九州'})#根据字典的键值对进行替换
df2.replace({'Sex':1},1024)#将Sex列的1全部替换为1024

  第二节 apply和Transform

    相同点:都能针对Dataframe的特征的计算,常与groupby()分组聚合方式下节更新方法连用

    不同点:aplly参数可以是自定义函数,包括简单的求和函数以及复制的特征间的差值函数等。apply不能直接使用python的内置函数,比如sum、max、min。

        Transform参数不能是自定义的特征交互函数,因为transform是针对每一元素(即每一列特征操作)进行计算。

#先建立数组
df = pd.DataFrame(data = np.random.randint(0,150,size = [10,3]),index = list('ABCDEFGHIJ'),columns=['Python','En','Math'])

df['Python'].apply(lambda x:True if x >50 else False)#选取python学科中的大于50的数据
df.apply(lambda x : x.median(),axis = 0) # 列的中位数

#自定义函数算法
def avg(x):
return (x.mean(),x.max(),x.min(),x.var().round(1))
df.apply(avg,axis=0)#输出列的平均值,最大值,最小值,方差保留一位小数

# ⼀列执⾏多项计算
df['Python'].transform([np.sqrt,np.log10]) # 对单列数据处理做开平方和对数运算

#自定义函数算法
def convert(x):
if x > 140:
x -= 12
else:
x += 12
return x

df.transform({'Python':np.sqrt,'En':np.log10,'Math':convert}).round(1)# 对多列数据处理做开不同运算

---------------------------------------------!!!!!!!!!第二次更新!!!!!!!!!!!----------------------------------------------------------

第九部分 数据重塑

df = pd.DataFrame(data = np.random.randint(0,150,size = [20,3]),
index = pd.MultiIndex.from_product([list('ABCDEFHIJK'),['一期','二期']]),# 多层索引
columns=['Python','En','Math'])

df.unstack(level=1)#行作列
df.stack()#列作行
df.mean(level=1)#各学科每期平均分
df.mean(level=0)#各学员平均分
df.mean()#各科平均分

第十部分 统计方法函数

  pandas拥有多种常⽤的数学统计⽅法。可以满足大多半的数据处理,对Series和DataFrame行计算并返回Series形式的数组
 
#创建数据
df = pd.DataFrame(data = np.random.randint(0,150,size = [10,3]),
index = list('ABCDEFGHIJ'),
columns=['Python','En','Math']) df.count() # ⾮NA值的数量
df.max(axis = 0) #轴0最⼤值,即每⼀列最⼤值
df.min() #默认计算轴0最⼩值
df.median() # 中位数
df.sum() # 求和
df.mean(axis = 1) #计算每⼀⾏的平均值
df.quantile(q = [0.2,0.5,0.9]) # 分位数
df.describe() # 查看数值型列的汇总统计,计数、平均值、标准差、最⼩值、四分位数、最⼤值
df['Python'].value_counts() # 统计元素出现次数
df['Math'].unique() # 去重
df.cumsum() # 累加
df.cumprod() # 累乘
df.std() # 标准差
df.var() # ⽅差
df.cummin() # 累计最⼩值
df.cummax() # 累计最⼤值
df.diff() # 计算差分
df.pct_change() # 计算百分⽐变化
df.cov() # 属性的协⽅差
df['Python'].cov(df['Math']) # Python和Math的协⽅差
df.corr() # 所有属性相关性系数
df.corrwith(df['En']) # 单⼀属性相关性系数
#标签索引计算方式
df['Python'].argmin() # 计算Python列的最⼩值位置
df['Math'].argmax() # 计算Math列的最⼤值位置
df.idxmax() # 最⼤值索引标签
df.idxmin() # 最⼩值索引标签

第十一部分 排序

#创建数据
df = pd.DataFrame(data = np.random.randint(0,150,size = [10,3]),
index = list('ABCDEFGHIJ'),
columns=['Python','En','Math'])
ran = np.random.permutation(10)
df = df.take(ran)#随机排列行索引

df.sort_index(axis=0,ascending=True)#按照行索引降序排序
df.sort_index(axis=1,ascending=True)#按照列索引降序排序

df.sort_values(by='Python')#根据Python列的值降序排序
df.sort_values(by=['Python','Math'])#先按找Python排序在按照Math排序
lage = df.nlargest(3,columns='Math') # 根据属性Math排序,返回最⼤3个数据
samll = df.nsmallest(3,columns='Python') # 根据属性Python排序,返回最⼩3个数据
display(lage,samll)

第十二部分 cut与qcut的分箱处理

  cut函数对数据进行分箱处理的操作, 也就是 把一段连续的值切分成若干段,每一段的值看成一个分类。这个把连续值转换成离散值的过程,我们叫做分箱处理cut会按照数据值由大到小的顺序将数据分割为若干分,并且使每组范围大致相等

  qcut是按变量的数量来对变量进行分割,并且尽量保证每个分组里变量的个数相同。

df['py_cut'] = pd.cut(df.Python,bins=4)#按照数据范围分箱
df['en_cut'] = pd.cut(df.En,bins=4)#按照数据个数分箱
df['q_评级'] = pd.qcut(df.Python,q = 4,# 4等分
labels=['差','中','良','优']) # 分箱后分类
df['c_评级'] = pd.cut(df.En,#分箱数据
bins = [0,60,90,120,150],#分箱断点
right = False,# 左闭右开原则
labels=['差','中','良','优'])# 分箱后分类

Python Pandas的使用 !!!!!详解的更多相关文章

  1. python pandas字符串函数详解(转)

     pandas字符串函数详解(转)——原文连接见文章末尾 在使用pandas框架的DataFrame的过程中,如果需要处理一些字符串的特性,例如判断某列是否包含一些关键字,某列的字符长度是否小于3等等 ...

  2. Pandas 常见操作详解

    Pandas 常见操作详解 很多人有误解,总以为Pandas跟熊猫有点关系,跟gui叔创建Python一样觉得Pandas是某某奇葩程序员喜欢熊猫就以此命名,简单介绍一下,Pandas的命名来自于面板 ...

  3. python之OS模块详解

    python之OS模块详解 ^_^,步入第二个模块世界----->OS 常见函数列表 os.sep:取代操作系统特定的路径分隔符 os.name:指示你正在使用的工作平台.比如对于Windows ...

  4. python之sys模块详解

    python之sys模块详解 sys模块功能多,我们这里介绍一些比较实用的功能,相信你会喜欢的,和我一起走进python的模块吧! sys模块的常见函数列表 sys.argv: 实现从程序外部向程序传 ...

  5. python中threading模块详解(一)

    python中threading模块详解(一) 来源 http://blog.chinaunix.net/uid-27571599-id-3484048.html threading提供了一个比thr ...

  6. Python数据类型及其方法详解

    Python数据类型及其方法详解 我们在学习编程语言的时候,都会遇到数据类型,这种看着很基础也不显眼的东西,却是很重要,本文介绍了python的数据类型,并就每种数据类型的方法作出了详细的描述,可供知 ...

  7. python引用和对象详解

    python引用和对象详解 @[马克飞象] python中变量名和对象是分离的 例子 1: a = 1 这是一个简单的赋值语句,整数 1 为一个对象,a 是一个引用,利用赋值语句,引用a指向了对象1. ...

  8. Python中time模块详解

    Python中time模块详解 在平常的代码中,我们常常需要与时间打交道.在Python中,与时间处理有关的模块就包括:time,datetime以及calendar.这篇文章,主要讲解time模块. ...

  9. Python 列表(List)操作方法详解

    Python 列表(List)操作方法详解 这篇文章主要介绍了Python中列表(List)的详解操作方法,包含创建.访问.更新.删除.其它操作等,需要的朋友可以参考下   列表是Python中最基本 ...

  10. Python模块调用方式详解

    Python模块调用方式详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其 ...

随机推荐

  1. Java String.split()的特殊用法

    1 //用多种字符分隔字符串 2 public class Main { 3 /* 4 * "(1,2),(2,4),(3,6),(4,7)"按[(),]分隔 5 * 空白(1,2 ...

  2. 关于Java集合框架的总结

    Java集合框架(都实现了Cloneable和Serializable接口)支持以下两个类型的容器: 一种是为了存储一个元素集合,简称集合(collection). 另一种是为了存储键/值对,称为图( ...

  3. 跟我一起用unity做小地图!

    lol的小地图 转载爬虫请自重,未问先转没排面 不爱多做铺垫,小地图对于一些游戏来说多重要大家都懂,不然你也不会来看我这篇文章的,对不对? 话不多说,开搞! 一.主体功能 一般来说,游戏里的迷你地图都 ...

  4. promise错误处理的三种方法

    promise碰到then,也就是resolve或者reject的时候是异步的,所以try...catch对它是没有用的 1.then(resolve,reject);  then方法中第二个回调,是 ...

  5. 20210821 打表,蛇,购物,ants

    考场 T1 没看懂 T4 一眼回滚莫队,但忘记怎么写了,小慌 模拟 T1 题意的时候教练让 zsy 澄清了一下,确定了我不会做... T2 一看就是毒瘤题,T3 感觉比较可做 T4 确定了回滚的细节, ...

  6. vue-cli坑比系列

    Error loading saved preferences: ~/.vuerc may be corrupted or have syntax errors. Please fix/delete ...

  7. LVS负载均衡集群--NAT模式部署

    目录: 一.企业群集应用概述 二.负载均衡群集架构 三.负载均衡群集工作模式分析 四.关于LVS虚拟服务器 五.NAT模式 LVS负载均衡群集部署 一.企业群集应用概述 1.群集的含义 Cluster ...

  8. go实现堆排序、快速排序、桶排序算法

    一. 堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法.以大堆为例利用堆顶记录的是最大关键字这一特性,每一轮取堆顶元素放入有序区,就类似选择排序每一轮选择一个最大值放入有序区,可以把堆排序看成是 ...

  9. Lambda函数接口和方法构造器应用

    函数式接口 什么是函数式接口? 在java中'有且仅有一个抽象方法的接口',就称为函数式接口. 可以通过Lambda表达式来创建该接口的对象.(若Lambda表达式抛出一个受检异常,那么该异常需要在目 ...

  10. CentOS8部署tftp

    tftp:简单文本传输协议,而ftp:文本传输协议.可以把tftp看成是ftp的精简版.tftp用于免登录传输小文件,tftp服务端监听在udp协议的69端口tftp简单的工作原理: tftp服务端与 ...