Python数据分析三剑客之Pandas篇

Pandas是什么

Pandas 包 是基于 Python 平台的数据管理利器,已经成为了 Python 进行数据分析和挖掘 时的数据基础平台和事实上的工业标准。使用 Pandas 包完成数据读入、数据清理、数据准备、图表呈现等 工作,为继续学习数据建模和数据挖掘打下坚实基础。

安装

`pip install pandas`


Series对象创建

Series:一维数组,与Numpy中的一维array类似。它是一种类似于 一维数组的对象,是由一组数据(各种 NumPy 数据类型)以及一组与 之相关的数据标签(即索引)组成。仅由一组数据也可产生简单的 Series 对象。用值列表生成 Series 时,Pandas 默认自动生成整数 索引 。

pandas中两个重要的属性 values 和index,values:是Series对象的 原始数据。index:对应了Series对象的索引对象

DataFrame对象创建

DataFrame 是 Pandas 中的一个表格型的数据结构,包含有一组有 序的列,每列可以是不 同的值类型(数值、字符串、布尔型等),DataFrame 即有行索引也 有列索引,可以被看做是由 Series 组成的字典。将两个series对象作为dict的value传入,就可以创建一个 DataFrame对象。

导入Excel文件

使用read_excel()方法导入文件,首先要指定文件的路径。

说明 :使用Pandas模块操作Excel时候,需要安装openpyxl

`   1.  import pandas as pd      2.  pd.read_excel('stu_data.xlsx')        `


导入.xlsx文件时,指定导入哪个Sheet

`   1.  pd.read_excel('stu_data.xlsx',sheet_name='Target')      2.  pd.read_excel('stu_data.xlsx',sheet_name=0)        `


导入.xlsx文件时,通过index_col指定行索引

`pd.read_excel('stu_data.xlsx',sheet_name=0,index_col=0)`


导入.xlsx文件时,通过header指定列索引

`pd.read_excel('stu_data.xlsx',sheet_name=0,header=1)`


有时候本地文件的列数太多,而我们又不需要那么多列时,我们就 可以通过设置usecols参数来指定要导入的列。

`pd.read_excel('stu_data.xlsx',usecols=[1,2,3])`


导入csv文件

导入csv文件时除了指明文件路径,还需要设置编码格式。Python 中用得比较多的两种编码格式是UTF-8和gbk,默认编码格式是UTF-8。我们要根据导入文件本身的编码格式进行设置,通过设置参数 encoding来设置导入的编码格式。

导入.csv文件,文件编码格式是gbk

`pd.read_csv('stu_data.csv',encoding='gbk')`


导入.csv文件,指明分隔符

`   1.  pd.read_csv("stu_data.csv",encoding='gbk',sep=' ')      2.  pd.read_csv('stu_data.csv',encoding='gbk',sep=',')        `


导入txt文件

导入.txt文件用得方法时read_table(),read_table()是将利用分隔符 分开的文件导入。DataFrame的通用函数。它不仅仅可以导入.txt 文件,还可以导入.csv文件。

导入.txt文件

`pd.read_table('test_data.txt',encoding='utf8',sep='\t')   `


导入.csv文件,指明分隔符

`pd.read_table('stu_data.csv',encoding='gbk',sep=',')`


读取数据库数据

配置 MySQL 连接引擎:

`   1.  conn = pymysql.connect(      2.  host = 'localhost',      3.  user = 'root',      4.  passwd = 'root',      5.  db = 'mydb',      6.  port=3306,      7.  charset = 'utf8' )        `


读取数据表:

`   1.  pd.read_sql(      2.  sql :需要执行的 SQL 语句/要读入的表名称      3.  con : 连接引擎名称      4.  index_col = None :将被用作索引的列名称      5.  columns = None :当提供表名称时,需要读入的列名称      6.  list      7.  )      8.  tab1 = pd.read_sql('select * from      9.  emp',con=conn)      10.  tab1 = pd.read_sql('select count(*) from      11.  emp',con=conn)        `


保存数据

保存数据至外部文件

`   1.  df.to_csv(      2.  filepath_or_buffer :要保存的文件路径      3.  sep =:分隔符      4.  columns :需要导出的变量列表      5.  header = True :指定导出数据的新变量名,可直接      6.  提供 list      7.  index = True :是否导出索引      8.  mode = 'w' : Python 写模式,读写方式:r,r+ ,      9.  w , w+ , a , a+     encoding = 'utf-8' :默认      10.  导出的文件编码格式      11.  )        `


`   1.  df.to_excel(      2.  filepath_or_buffer :要读入的文件路径      3.  sheet_name = 1 Sheetl1 :要保存的表单名称      4.  )        `


保存数据至数据库

`   1.  df.to_sql(      2.  name :将要存储数据的表名称      3.  con : 连接引擎名称      4.  if_exists = 'fail' :指定表已经存在时的处理方      5.  式      6.  fail :不做任何处理(不插入新数据)      7.  replace :删除原表并重建新表      8.  append :在原表后插入新数据      9.  index = True :是否导出索引 )      10.  #pip install sqlalchemy      11.  from sqlalchemy import create_engine      12.  con =      13.  create_engine('mysql+pymysql://root:root@loc      14.  alhost:3306/mydb?charset=utf8')      15.  df.to_sql('t_stu',con,if_exists=append)        `


了解数据

head()与 tail()

head()方法返回前 n 行(观察索引值),显示元素的数量默认是 5,但 可以传递自定义数值

tail()方法返回后 n 行观察索引值),显示元素的数量默认是 5,但可 以传递自定义数值

`   1.  #浏览前几条记录      2.  df.head()      3.  df.head(10)      4.  #浏览最后几条记录      5.  df.tail()        `


info()

info()方法查看数据表中的数据类型,而且不需要一列一列的查看, info()可以输出整个表 中所有列的数据类型。

`df.info()`


shape

shape()方法会以元组的形式返回行、列数。注意 shape 方法获取 行数和列数时不会把索 引和列索引计算在内。

`df.shape`


describe()

describe()方法就是可以就可以获取所有数值类型字段的分布值。

`df.describe()`


列操作

修改变量列

columns

`df.columns =新的名称 list`


rename()

`   1.  df.rename(      2.  columns =新旧名称字典:{旧名称,:新名称,}      3.  inplace = False :是否直接替换原数据框)        `


`   1.  df.rename(columns =      2.  {'newname':'name','newname2':'name2'},      3.  inplace = True )        `


筛选变量列

通过 df.var 或 df[var] 可以选择单列

注意:但只适用于已存在的列,只能筛选单列,结果为 Series

`   1.  df[[var]] 单列的筛选结果为 DataFream      2.  df[['var1', 'var2']] 多列时,列名需要用列表形式提      3.  供(因此可使用列表中的切片操作) 多列的筛选结果为 DF        `


删除变量列

`   1.  df.drop(      2.  index / columns =准备删除的行/列标签,多个时用列表      3.  形式提供      4.  inplace = False :是否直接更改原数据框 )        `


`   1.  df.drop(columns =['col1','col2'])      2.  del df['column-name'] 直接删除原数据框相应的一列,      3.  建议尽量少用      4.  del df.column_name #不允许        `


添加变量列

根据新数据添加

`df[cloumn] = pd.Series([val,val2,val3],index=[c1,c2,c3])`


根据原数据添加

`df[cloumn] = df[c2]+df[c3]`


变量类型的转换

Pandas 支持的数据类型

具体类型是 Python, Numpy 各种类型的混合,可以比下表分的更细

float int string bool datetime64[nsr] datetime64[nsr,tz] timedelta[ns] category object

df.dtypes :査看各列的数据类型

在不同数据类型间转换

`   1.  df.astype(      2.  dtype :指定希望转换的数据类型,可以使用 numpy 或      3.  者 python 中的数据类型:int/float/bool/str      4.  copy = True :是否生成新的副本,而不是替换原数据框      5.  errors = 'raise' : 转换出错时是否抛出错误,      6.  raise/ ignore )        `


`   1.  #将df里所有的列转换成str      2.  df.astype('str')      3.  df.astype('str').dtypes      4.  #修改某一列数据的数据类型      5.  df.column.astype ('str')      6.  #转换错误      7.  df.astype('int', errors = 'ignore').dtypes 明      8.  确指定转换类型的函数        `


旧版本方法:

pd.to_datetime ()

pd.to_timedelta ()

pd.to_numeric ()

pd.to_string()

建立索引

新建数据框时建立索引

所有的数据框默认都已经使用从 0 开始的自然数索引,因此这里 的"建立”索引指的是自定义索引

`   1.  df = pd.DataFrame( {'varl' : 1.0, ' var2' :      2.  [1,2,3,4], 'var3' : ['test', 'python','test',      3.  'hello'] , 'var4' : 'cons'} , index =      4.  [0,1,2,3]      5.  )        `


读入数据时建立索引

使用现有的列

`df = pd.read_csv ("filename",index_col="column”)`


使用复合列

`df = pd.read_csv ("filename", index_col=[0,1..])`


指定某列为索引列

`   1.  df.set_index(      2.  keys :被指定为索引的列名,复合索引用 list:格式      3.  提供      4.  drop = True :建立索引后是否删除该列      5.  append = False :是否在原索引基础上添加索引,默      6.  认是直接替换原索引       inplace = False :是否直      7.  接修改原数据框 )        `


`   1.  df_new = df.set_index (keys=['学号','性别'],drop = False)      2.  df_new = df.set_index (keys='学号',append=True, drop=False)        `


将索引还原变量列

`   1.  df.reset_index(      2.  drop = False :是否将原索引直接删除,而不是还原为变量列      3.  inplace = False :是否直接修改原数据框)        `


引用和修改索引

引用索引

注意:索引仍然是有存储格式的,注意区分数值型和字符型的引用方式

`df.index`


修改索引

修改索引名

本质上和变量列名的修改方式相同

`   1.  df = pd.DataFrame({      2.  'name':['zs','ls','ww'],      3.  'level':['vip1','vip2','pm']      4.  })      5.  df.index.name='sno'        `


修改索引值

这里的修改本质上是全部替换

`df1.index = ['a', 'b', 'c']`


更新索引

reindex 则可以使用数据框中不存在的数值建立索引,并据此扩充 新索引值对应的索引行/ 列,同时进行缺失值填充操作。

`   1.  df.reindex(labels :类数组结构的数值,将按此数值重建索引,非必需      2.  copy = True :建立新对象而不是直接更改原 df/series 缺失数      3.  据的处理方式      4.  method :针对已经排序过的索引,确定数据单元格无数据时      5.  的填充方法,非必需      6.  pad / ffill:用前面的有效数值填充      7.  backfill / bfill:用后面的有效数值填充      8.  nearest:使用最接近的数值逬行填充      9.  fill_value = np.NaN :将缺失值用什么数值替代      10.  limit = None :向前/向后填充时的最大步长      11.  )        `


`   1.  import pandas as pd      2.  df = pd.DataFrame({      3.  'name':['zs','ls','ww'],      4.  'level':['vip1','vip2','pm']      5.  })      6.  df.reindex([0,1,3])      7.  df.reindex([0,1,2,3],method='ffill')      8.  df.reindex([0,1,2,3],fill_value="test")        `


Series的索引和切片

索引

`   1.  import numpy as np      2.  import pandas as pd      3.  data=pd.Series([4,3,25,2,3],index=list('abcde'))      4.  data['a'] #根据key获取      5.  data[1] #索引获取      6.  data[-1]        `


切片

`   1.  import numpy as np      2.  import pandas as pd      3.  data=pd.Series([4,3,25,2,3],index=list('abcde'))      4.  data['a':'d']      5.  data[2:4] #索引切片      6.  data[-3:-1]      7.  data[data>3]        `


如果索引与行名相同都是1,这时候就不知道是按照哪个来获取,所 以获取时候使用loc、iloc

loc函数:通过行索引 “Index” 中的具体值来取行数据及根据普通索 引获取。(如取"Index"为"A"的行)

iloc函数:通过行号来取行数据,及根据位置索引获取。

`   1.  data=pd.Series([5,3,2,5,9],index=[1,2,3,4,5])      2.  data.loc[1]      3.  data.iloc[1]        `


DataFrame的索引和切片

选择列

当想要获取 df 中某列数据时,只需要在 df 后面的方括号中指明要 选择的列即可。如果是 一列,则只需要传入一个列名;如果是同时选择多列,则传入多个列 名即可(注意:多个列名 用一个 list 存放)

`   1.  #获取一列      2.  df[col]      3.  #获取多列      4.  df[[col1 , col2]]        `


除了传入具体的列名,我们可以传入具体列的位置,即第几行,对 数据进行选取,通过传 入位置来获取数据时需要用到 iloc 方法。

`df.iloc[,[0,2]]`


按行列索引选择

DataFrame对象按照行列检索获取,可以使用loc和iloc函数,方括 号中逗号之前的部分表示要获取的行的索引,如果输入一个冒号, 或不输入任何数值表示获取所有的行或列,逗号之后方括号表示要 获取的列的索引。

`   1.  df.loc[普通行索引,普通列索引]      2.  df.iloc[位置行索引,位置列索引]        `


isin()选择

df.isin(values) 返回结果为相应的位置是否匹配给出的 values

values 为序列:对应每个具体值

values 为字典:对应各个变量名称

values 为数据框:同时对应数值和变量名称

`   1.  df.col.isin([1,3,5])      2.  df[ df.col.isin([1,3,5])]      3.  df[ df.col.isin(['val1','val2'])]      4.  df[ df.index.isin(['val1','val2'])]        `


query()的使用

使用boolean值表达式进行筛选

`   1.  df.query(      2.  expr:语句表达式      3.  inplace=False;是否直接替换原数据框      4.  )        `


可以使用前缀“@”引用环境变量 等号为==,而不是=

`   1.  df.query("col>10 and col<90 and col1=val")      2.  limit = 5      3.  df.query("col<=@limit & col==val")      4.  df.query("col<=@limit & col!=val")        `


排序

用索引排序

`   1.  df.sort_index(      2.  level :(多重索引时)指定用于排序的级别顺序号/名称18      3.  ascending = True :是否为升序排列,多列时以表形式提供      4.  inplace = False :      5.  na_position = 'last‘ :缺失值的排列顺序,      6.   first/last      7.  )        `


`   1.  df = pd.read_excel("stu_data.xlsx",      2.  index_col=["学号”,”性别”]) df.set_index( ['学号','性别'], inplace = True )      3.  # 通过索引进行排序      4.  df.sort_index()      5.  df.sort_index(ascending = [True,False])      6.  #设置哪个索引进行排序      7.  df.sort_index(level="支出")      8.  df.sort_index(level= ["支出","体重"])        `


使用变量值排序

`   1.  df.sort_values(      2.  by :指定用于排序的变量名,多列时以列表形式提供      3.  ascending = True :是否为升序排列      4.  inplace = False )        `


`   1.  # 根据值进行排序      2.  df.sort_values(by='身高')        `


计算新变量

新变量为常数

`df['vamame'] = value`


基于原变量做简单四则运算

`   1.  df['var'] = df['oldvar'] *100      2.  df['var'] = df.oldvar * 100        `


基于一个原变量做函数运算

`   1.  df.apply(      2.  func : 希望对行/列执行的函数表达式      3.  axis = 0 :针对行还是列逬行计算      4.  0 ' index':针对每列进行计算      5.  1' columns ':针对每行逬行计算      6.  )        `


简化的用法

df [’ varname ’ ] = df. oldvar. apply (函数表达式)

`   1.  df['n5'] = df.体重.apply(math.sqrt)      2.  df['n7'] = df.体重.apply(numpy.sqrt)        `


不修改原df,而是生成新的df

df.assign(varname = expression)

在指定位置插入新变量列

`   1.  df.insert(      2.  loc :插入位置的索引值,0 <= loc <= len (columns)      3.  column :插入的新列名称      4.  value : Series 或者类数组结构的变量值      5.  allow_duplicates = False :是否允许新列重名      6.  )        `


#该方法会直接修改原 df

`   1.  # 指定位置增加新列      2.  df.insert(1,'new_col',100)      3.  df.insert(1,'new_col2',df.课      4.  程.apply(get_first))        `


修改替换变量值

本质上是如何直接指定单元格的问题,只要能准确定位单元地址, 就能够做到准确替换。

对应数值的替换

`   1.  df.replace(      2.  to_replace = None :将被替换的原数值,所有严格匹配的数值      3.  将被用 value 替换,可以      4.  str/regex/list/dict/Series/numeric/None      5.  value = None :希望填充的新数值      6.  inplace = False      7.  )        `


指定数值范围的替换

方法一:使用正则表达式完成替换

`df.replace(regex, newvalue)`


方法二:使用行筛选方式完成替换 用行筛选方式得到行索引,然后用 loc 命令定位替换 目前也支持直接筛选出单元格进行数值替换

注意:query 命令的类 SQL 语句可以逬行检索,但不直接支持数值替换

`   1.  # 使用正则匹配数据      2.  df.开设.replace(regex = '不.+',value = '可以',inplace = True)      3.  #iloc loc      4.  df.支出.iloc[0:3] = 20      5.  df.支出.loc[0:2] =30      6.  #条件筛选替换      7.  df.体重[df.体重>70] =70      8.  df[df.体重==70].体重 = 80   # 注意引用问题      9.  #query()的使用      10.  df.query('性别 == "女" and 体重 > 60 ').体重 =50      11.  df.loc[df.query('性别 == "女" and 体重 > 60').体重.index,'体重'] = 50        `


数值变量分段

`   1.  pd.cut(      2.  X :希望逬行分段的变量列名称      3.  bins :具体的分段设定      4.  int :被等距等分的段数      5.  sequence of scalars :具体的每一个分段起点,必须包括最值,可不等距      6.  right = True :每段是否包括右侧界值      7.  labels = None :为每个分段提供自定义标签      8.  include_lowest = False :第一段是否包括最左侧界值,需要和      9.  right 参数配合      10.  )        `


#分段结果是数值类型为 Categories 的序列

pd.qcut # 按均值取值范围进行等分

`   1.  #按均值取值范围进行等分      2.  df['cut1'] = pd.qcut(df.身高,q=5)      3.  #自定义分段      4.  df['cut2'] = pd.cut(df.身高,bins=[150,160,170,180,190],right=False)        `


数据分组

`   1.  df.groupby(      2.  by :用于分组的变量名/函数      3.  level = None :相应的轴存在多重索引时,指定用于分组的级别      4.  as_index = True :在结果中将组标签作为索引      5.  sort = True :结果是否按照分组关键字逬行排序      6.  )#生成的是分组索引标记,而不是新的 df        `


基于拆分进行筛选

筛选出其中一组 dfgroup.get_group()

`   1.  dfg.get_group ('不必要').mean ()      2.  dfg.get_group ('不必要').std ()        `


筛选出所需的列

该操作也适用于希望对不同的变量列进行不同操作时

分组汇总

在使用 groupby 完成数据分组后,就可以按照需求进行分组信息汇 总,此时可以使用其 它专门的汇总命令,如 agg 来完成汇总操作。

使用 agg 函数进行汇总

df.aggregate( ) 名称可以直接简写为 agg

`   1.  dfg.agg( 'count')      2.  dfg.agg('median')      3.  dfg.agg(['mean', 'median'])      4.  dfg.agg(['mean', 'median'])      5.  #引用非内置函数      6.  import numpy as np      7.  df2.身高.agg (np. sum)      8.  dfg.身高.agg (np. sum)        `


多个数据源的合并

数据的纵向合并

`   1.  df.append(      2.  other :希望添加的 DF/Series/字典/上述对象的列表使用列表方式,就可以实现一次合并多个新对象      3.  ignore_index = False :添加时是否忽略索引      4.  verify_integrity = False :是否检查索引值的唯一性,有重复时报错      5.  )        `


`df = df.append( [df2, df3, df4])`


数据的横向合并

merge 命令使用像 SQL 的连接方式

`   1.  pd.merge(      2.  需要合并的 DF      3.  left :需要合并的左侧 DF      4.  right :需要合并的右侧 DF      5.  how = ' inner':具体的连接类型      6.  {left、right 、outer 、 inner、)      7.  两个 DF 的连接方式      8.  on :用于连接两个 DF 的关键变量(多个时为列表),必须在两侧都出现      9.  left_on :左侧 DF 用于连接的关键变量(多个时为列表)      10.  right_on :右侧 DF 用于连接的关键变量(多个时为列表)      11.  left_index = False :是否将左侧 DF 的索引用于连接      12.  right_index = False :是否将右侧 DF 的索引用于连接      13.  )        `


concat 命令

同时支持横向合并与纵向合并

`   1.  pd.concat(      2.  objs :需要合并的对象,列表形式提供      3.  axis = 0 :对行还是对列方向逬行合并      4.  (0 index 、 1 columns )      5.  join = outer :对另一个轴向的索引值如何逬行处理      6.  (inner 、outer )      7.  ignore_index = False      8.  keys = None :为不同数据源的提供合并后的索引值      9.  verify_integrity = False 是否检查索引值的唯一性,有重复时报错      10.  copy = True      11.  )        `


`   1.  ser1=pd.Series([1,2,3],index=list('ABC'))      2.  ser2=pd.Series([4,5,6],index=list('DEF'))      3.  pd.concat([ser1,ser2])        `


处理缺失值

认识缺失值

系统默认的缺失值 None 和 np. nan

缺失值查看

直接调用info()方法就会返回每一列的缺失情况。

Pandas中缺失值用NaN表示,从用info()方法的结果来看,索引1这 一列是1 2 non-null float64,表示这一列有2个非空值,而应该是 3个非空值,说明这一列有1个空值。还可以用isnull()方法来判断哪个值是缺失值,如果是缺失值则返回 True,如果不是缺失值返回False。df.isna(): 检查相应的数据是否为缺失值 同 df.isnull()。df.notna()等同于notnull()

检查多个单元格的取值是否为指定缺值

`   1.  df.any(      2.  axis : index (0), columns (1)      3.  skipna = True :检查时是否忽略缺失值      4.  level = None :多重索引时指定具体的级别      5.  )      6.  df.all(      7.  axis : index (0), columns (1)      8.  skipna = True :检查时是否忽略缺失值      9.  level = None :多重索引时指定具体的级别      10.  )        `


填充缺失值

调用fillna()方法对数据表中的所有缺失值进行填充,在fillna()方法 中输入要填充的值。还可以通过method参数使用前一个数和后一 个数来进行填充。

`   1.  df.fillna(      2.  value :用于填充缺失值的数值,也可以提供dict/Series/DataFrame 以进—步指明哪些索引/列会被替换不能使用 list      3.  method = None :有索引时具体的填充方法,向前填充,向后填充等      4.  limit = None :指定了 method 后设定具体的最大填充步长,此步长不能填充      5.  axis : index (0), columns (1)      6.  inplace = False      7.  )        `


`   1.  data=pd.Series([3,4,np.nan,1,5,None])      2.  print('以0进行填充:')      3.  print(data.fillna(0))      4.  print('以前一个数进行填充:')      5.  print(data.fillna(method='ffill'))      6.  print('以后一个数进行填充:')      7.  print(data.fillna(method='bfill'))      8.  print('先按前一个,再按后一个')      9.  print(data.fillna(method='bfill').fillna(method='ffill'))        `


删除缺失值

调用dropna()方法删除缺失值,dropna()方法默认删除含有缺失值 的行,也就是只要某一行有缺失值就把这一行删除。如果想按列为 单位删除缺失值,需要传入参数axis=’columns’。

`   1.  df.dropna(      2.  axis = 0 : index (0), columns (1)      3.  how = any : any、all      4.  any :任何一个为 NA 就删除      5.  all :所有的都是 NA 删除      6.  thresh = None :删除的数量阈值,int      7.  subset :希望在处理中包括的行/列子集      8.  inplace = False :      9.  )        `


`   1.  df=pd.DataFrame([[1,2,np.nan],[4,np.nan,6],[5,6,7]])      2.  print('默认为以行为单位剔除:')      3.  print(df.dropna())      4.  print('以列为单位剔除:')      5.  df.dropna(axis='columns')        `


数据查重

标识出重复的行

标识出重复行的意义在于进一步检査重复原因,以便将可能的错误 数据加以修改

Duplicated

`df['dup' ] = df.duplicated( ['课程','开设'])`


利用索引进行重复行标识 df.index.duplicated()

`   1.  df2 = df.set_index ( ['课程','开设'] )      2.  df2.index.duplicated ()        `


直接删除重复的行

`   1.  drop_duplicates (      2.  subset=“ ”按照指定的行逬行去重      3.  keep='first' 、 'last' 、 False 是否直接删除有重复的所有记录      4.  )        `


`   1.  df. drop_duplicates ( ['课程', '开设' ] )      2.  df. drop_duplicates ( ['课程', ‘开设' ] , keep= False )        `


日期时间变量

Timestamp

`   1.  from datetime import datetime      2.  pd.Timestamp(datetime(2032,1,1))      3.  pd.Timestamp(datetime(2032,1,2,3,4,5))      4.  pd.Timestamp(2032,1,2)      5.  pd.Timestamp('2032-01-02 3:4:5')        `


Peroid

可以被看作是简化之后的 Timestamp 对象

由于详细数据的不完整,而表示的是一段时间,而不是一个时点 但是实际使用中很可能是按照时点在使用 很多使用方法和 Timestamp 相同,因此不再详细介绍

`   1.  pd.Period('2032-01')      2.  pd.Period('2032-01',freq='D')#精确到日        `


数据交叉表

`   1.  df.pivot_table(      2.  行列设定      3.  index / columns :行变量/列变量,多个时以list 形式提供      4.  单元格设定      5.  values :在单元格中需要汇总的变量列,可不写      6.  aggfunc = numpy.mean : 相应的汇总函数      7.  汇总设定      8.  margins = False :是否加入行列汇总      9.  margins_name = 'All':汇总行/列的名称      10.  缺失值处理      11.  fill_value = None :用于替换缺失值的数值      12.  dropna = True      13.  )        `


`   1.  pd.crosstab(      2.  选项和 pivot_table 几乎相同      3.  相对而言需要打更多字母,因此使用更麻烦      4.  但是计算频数最方便      5.  输出格式为数据框 )        `


`   1.  df.pivot_table(index = ['课程','性别'],      2.  columns='开设',values = ['体重','身高'],aggfunc='sum')      3.  pd.crosstab(index=[df.课程],columns=df.开设,values=df.体重,aggfunc=sum)        `


数据的图形展示

`   1.  df.plot(      2.  绘图用数据      3.  data :数据框      4.  x = None:行变量的名称/顺序号      5.  y = None :列变量的名称/顺序号      6.  kind = 'line':需要绘制的图形种类      7.  line : line plot (default)      8.  bar : vertical bar plot      9.  barh : horizontal bar plot      10.  hist : histogram      11.  box : boxplot      12.  kde : Kernel Density Estimation plot      13.  density : same as kde      14.  area : area plot      15.  pie : pie plot      16.  scatter : scatter plot      17.  hexbin : hexbin plot      18.  各种辅助命令      19.  figsize : a tuple (width, height) in inches      20.  xlim / ylim : X/Y 轴的取值范围,2-tuple/list 格式      21.  logx / logy / loglog = False :对 X/Y/双轴同时使用对数尺度      22.  title : string or list      23.  Alpha :图形透明度,0-1      24.  图组命令      25.  subplots = False :是否分图组绘制图形      26.  sharex :是否使用相同的 X 坐标      27.  ax = None 时,取值为 True,否则取值为 False      28.  sharey = False :是否使用相同的 Y 坐标      29.  ax = None :需要叠加的 matplotlib 绘图对象        `


图形种类的等价写法 df.plot.kind()

配置绘图系统环境

`   1.  import matplotlib.pyplot as plt      2.  plt.rcParams['font.sans-serif']=['SimHei'] #      3.  指定默认字体 SimHei为黑体      4.  plt.figure ()      5.  import seaborn as sns      6.  sns.set_style('whitegrid')        `


`   1.  pd.value_counts(df.课程).plot.bar()      2.  pd.value_counts(df.课程).plot(kind='bar')      3.  pd.value_counts(df.课程).plot.barh()        `


整理不易,希望对学习Pandas的小伙伴有所帮助!

点击下方安全链接前往获取

CSDN大礼包:《Python入门&进阶学习资源包》免费分享

👉Python实战案例👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

图片

图片

👉Python书籍和视频合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

图片

👉Python副业创收路线👈

图片

这些资料都是非常不错的,朋友们如果有需要《Python学习路线&学习资料》,点击下方安全链接前往获取

CSDN大礼包:《Python入门&进阶学习资源包》免费分享

本文转自 网络,如有侵权,请联系删除。

  • 14
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值