数据分析----Pandas

一、简介

pandas 是基于NumPy 的一种工具,该工具是为解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。(摘自百度百科)

二、导入

pandas使用前需要导入
导入方式如下:

import pandas
import pandas as pd  #pd为pandas的简称
from pandas import *

三、基本数据结构

1、Series

(1)简介
一维数组,与Numpy中的一维array类似。二者与Python基本的数据结构List也很相近。Series如今能保存不同种数据类型,字符串、bool值、数字等都能保存在Series中。
(2)创建一个Series
一维Series可用一维列表初始化:

import pandas as pd
s=pd.Series([1,2,3,4,5,6,7])
print(s)

注:空值可写为np.nan
输出结果为:

0    1
1    2
2    3
3    4
4    5
5    6
6    7
dtype: int64

其中第一列为索引,第二列为数据,最后一行输出的是数据类型。
(3)修改索引名称
默认情况下,Series的索引都是数字,也可使用额外参数指定

import pandas as pd
s=pd.Series([1,2,3,4,5,6,7],["a","b","c","d","e","f","g"])
print(s)

输出结果为:

a    1
b    2
c    3
d    4
e    5
f    6
g    7
dtype: int64

查看索引:s.index
修改索引:s.index=[name1,name2,…,namen]
设置索引总名称:s.index.name=" "
(3)值
查看所有值:s.values
取某个值:s[索引]
(4)切片
s[起点 : 终点(不包含): 步长]

2、DataFrame

(1)简介
二维的表格型数据结构。很多功能与R中的data.frame类似。可以将DataFrame理解为Series的容器。(摘自百度百科)
(2)创建一个DataFrame结构
可用二维列表初始化:
df=pd.DataFrame(二维数组,index=[行索引],columns=[列索引])

import pandas as pd
df=pd.DataFrame([[1,2,3,4,5],[6,7,8,9,10]],index=['a','b'],columns=[1,2,3,4,5])
print(df)

输出结果为:

   1  2  3  4   5
a  1  2  3  4   5
b  6  7  8  9  10

第一列为行索引(index),第一行为列索引(columns)。

也可以用字典传入数据:
df=pd.DataFrame(字典,index=[行索引] )
字典的每个key代表一列,其value可以是各种能转化为Series的对象。

import pandas as pd
df=pd.DataFrame({'a':'test','b':[4,5,6]},index=[1,2,3],)
print(df)

输出结果为:

     a   b
1  test  4
2  test  5
3  test  6

与Series要求所有的类型都一致不同,DataFrame只要求每一列数据的格式相同
查看DataFrame内各列的数据类型:
df.dtypes
(3)查看数据
查看前面n行(默认为5行):df.head(n)
查看后面n行(默认为5行):df.tail(n)
(4)行索引,列索引,数据的查看
行索引:df.index
列索引:df.colunms
数据值:df.values
(5)读取数据
一般为excel文件,excel文件后缀为(.xlsx)
如果文件和Jupiter notebook在同一路径下:
df=pd.read_excel(‘文件名+后缀’)
如果路径不同,则需要加上路径:
df=pd.read_excel(r’路径’)
(6)行的操作
取某一行:
df.iloc[索引] df.loc[索引]

取几行:
df.iloc[起点:终点(不包含):步长]
df.loc[起点:终点(包含):步长]

添加一行:
s=pd.Series(字典)
s.name=行索引
df=df._append(s)
例如:

import pandas as pd
df=pd.DataFrame({'a':'test','b':[4,5,6,7,8]})
s=pd.Series({'a':'test','b':3})
s.name=5
df=df._append(s)
print(df)

运行后添加一行:
5 test 3

删除一行:
df=df.drop(行索引)

(7)列操作
查看某一列:
df[列索引][行起点:行终点(不包括)]

查看某几列:
df[[列索引1,列索引2,…,列索引n]]

增加一列:
df[列索引]=添加的内容

删除一列:
df=df.drop(列索引,axis=1)

(8)用索引取数据
df.loc[index,column]
df.loc[[index1,index2,…,indexn],[column1,column2,…,columnn]]

(9)条件选择
df[条件][行起点:行终点(不包括)]
注:与&
或|

(10)缺失值及异常值的处理
dropna:对标签中的缺失值进行过滤,删除缺失值
fillna:对缺失值进行补充
isnull:返回一个布尔值,判断那些值是缺失值
notnull:isnull的否定式

判断缺失值:
df[列索引].isnull()

填充缺失值:
df[列索引].fillna(填充数据,inplace=True)

删除缺失值:
df.dropna()
括号内可填:
how=‘all’:删除全为空值的行或列
inplace=True:覆盖之前的数据
axis=0,axis=1:选择删除行或列,默认为0

处理异常值:
df=df[条件]

删除行后改索引:
df.index=range(len(df))

替换数据:
df[索引].replace(原数据,新数据,inplace=True)
df[索引].replace([原数据1,…,原数据n],[新数据1,…,新数据n],inplace=True)
注:切片使用引用机制,若在切片内替换数据,需要在截取数据的语句后加一个.copy()复制一份数据给df。

import pandas as pd
df=pd.read_excel(r'C:\Users\Desktop\课程中用到的数据\film.xlsx')
df1=df[:6].copy()
df1['首映地点'].replace('美国','usa',inplace=True)
print(df1)

(11)数据保存
df.to_excel(‘文件名+后缀’)

(12)数据格式转化
查看格式:
df[索引].dtype

改变格式:
df[索引]=df[索引].astype(目标格式)

(13)排序
按值排序:
df.sort_values(by=索引)
默认升序,若要改为降序:
df.sort_values(by=索引,ascending=False)

多个值排序:
df.sort_values(by=[索引1,索引2,…])
先按索引1排,再按索引2排,以此类推

四、基本统计分析

1、描述性统计

df.describe()
能提供一系列统计数据,有助于发现一些异常值

2、求一些常用的统计数据

功能语法
求最大值df[索引].max()
求最小值df[索引].min()
求均值df[索引].mean()
求中值df[索引].median()
求方差df[索引].var()
求标准差df[索引].std()
求和df[索引].sum()
求相关系数df[[索引1,索引2]].corr()
求协方差df[[索引1,索引2]].cov()
计数len(df)
统计唯一值len(df[索引].unique())
对唯一值出现的次数进行计数df[].value_counts()

五、数据透视

1、基础形式

pd.pivot_table(df,index=[索引] )

(1)默认进行均值运算,但也可以指定函数来统计不同数值:
pd.pivot_table(df,index=[],aggfunc=函数)
对不同值执行不同函数:
pd.pivot_table(df,index=[ ],values=[ ],aggfunc={索引1:函数,…,索引n:函数})

(2)也可指定需要汇总的数据:
pd.pivot_table(df,index=[索引],values=[索引])

2、查看所有结果

当处理数据过多时会进行省略,如果想查看所有数据时:
设置最多显示n列:pd.set_option(‘max_.columns’,n)
设置最多显示n行:pd.set_option(‘max_.rows’,n)

3、处理非数值(NaN)

可使用fill_value将其设置为0:
pd.pivot_table(df,index=[ ],fill_value=0)

4、显示总和数据

添加margins=True可在下方显示一些总和数据
pd.pivot_table(df,index=[],margins=True)

六、数据重塑和轴向旋转

1、Series的层次化索引

s=pd.Series([ ],index=[[大索引],[小索引]])
例如:

import pandas as pd
s=pd.Series([1,2,3,4,5,6],index=[['a','a','a','b','b','b'],[1,2,3,1,2,3]])
print(s)

输出结果为:

a  1    1
   2    2
   3    3
b  1    4
   2    5
   3    6
dtype: int64

其中ab为大索引,123为小索引

取值:
s[大索引] :取大索引下的值
s[:,1] :取每个大索引的第一行
s[大索引][小索引]

2、DataFrame的层次化索引

df=pd.DataFrame([ ],index=[[大索引],[小索引]],columns=[[大索引],[小索引]])

import pandas as pd
df=pd.DataFrame([[1,2,3],[6,7,8],[4,5,0]],index=[['一','一','二'],[1,2,1]],columns=[['a','b','b'],[1,1,2]])
print(df)

输出结果为:

      a  b   
      1  1  21  1  2  3
   2  6  7  81  4  5  0

其中一二为行的大索引,12为行的小索引,ab为列的大索引,12为列的小索引

也可以为行和列的大索引和小索引命名:
为行索引命名:df.index.names=[名称1,名称2]
为列索引命名:df.columns.names=[名称1,名称2]

import pandas as pd
df=pd.DataFrame([[1,2,3],[6,7,8],[4,5,0]],index=[['一','一','二'],[1,2,1]],columns=[['a','b','b'],[1,1,2]])
df.index.names=['row1','row2']
df.columns.names=['col1','col2']
print(df)

输出结果为:

col1       a  b   
col2       1  1  2
row1 row2         
一    1     1  2  3
      2     6  7  81     4  5  0

运行后row1为行的大索引的总称,row2为行的小索引的总称,col1为列的大索引的总称,col2为列的小索引的总称。
利用这些总称可以调换索引的位置:
df=df.swaplevel(索引总称1,索引总称2)

把列变为索引:df=df.set_index([列名称])
把索引变为列:df=df.reset_index([索引名])

取消层次化索引:df=df.reset_index()

每个索引都是一个元组,可用df.index()查看

数据旋转:df.T可直接让数据行列进行交换

3、Series与DataFrame的互换

(1)将Series变为DataFrame:s.unstack()

import pandas as pd
s=pd.Series([1,2,3,4,5,6],index=[['a','a','a','b','b','b'],[1,2,3,1,2,3]])
s=s.unstack()
print(s)

输出结果为:

   1  2  3
a  1  2  3
b  4  5  6

大索引变行索引,小索引变列索引
(2)将DataFrame变为Series:df.stack()

import pandas as pd
df=pd.DataFrame([[1,2,3],[6,7,8],[4,5,0]],index=[['一','一','二'],[1,2,1]],columns=[['a','b','b'],[1,1,2]])
df=df.stack()
print(df)

输出结果为

         a  b
一 1 1  1.0  2
    2  NaN  3
  2 1  6.0  7
    2  NaN  81 1  4.0  5
    2  NaN  0

行索引变大索引,列索引变小索引

注:转化有可能造成空值出现

七、数据分组与分组运算

GroupBy技术:实现数据分组和分组运算,作用类似于数据透视表

1、分组

group=df.groupby(分组依据)
也可传入多个分组变量:
group=df.groupby([分组依据1,分组依据2])

2、计算分组后的各个统计量

group.mean()等
注:只会对数值变量进行分组运算,如数据不需运算,可设置为字符串

八、离散化处理

离散化也可称为分组、区间化

pd.cut(x,bins,right=True,labels=None,retbns=False,precision=3,include_lowest=False)

x:需要离散化的数组、Series、DataFrame对象
bins:分组依据
right=True:是否包含右端点,默认为True,即包含
labels=None:定义区间名称
retbns=False:是否返回每个对应bins的列表
precision=3:精度设置
include_lowest=False:是否包含左端点,默认为False,即不包含
例:

df1=pd.cut(df['评分'],[0,3,5,7,9,10],labels=['E','D','C','B','A'])

解释:评分(0,3]为E,(3,5]为D,(5,7]为C,(7,9]为B,(9,10]为A

九、合并数据集

1、append

append可以将两个数据集进行上下拼接
df1.append(df2)

2、merge

pd.merge(left,right,how='inner',on=None,left_on=None,right_on=None,left_index=False,right_index=False,sort=True,suffixes=('_x','_y'))

left/right:对象
how=‘inner’:取交集
on:连接处,必须是left,right中都有的列
left_on:用从left中选取的列作连接处
right_on:用从right中选取的列作连接处
left_index:将左侧行索引用作其连接键
right_index:将右侧行索引用作其连接键
sort=True:根据连接键对合并后的数据进行排序,默认为 True 。有时在处理大数据集时,禁用该选项可获得更好的性能
suffixes=('x’,'y’):字符串值元组,用于追加到重叠列名的末尾,默认为(’ x ‘;,’ y ')。例如,如果左右两个 DataFrame 对象都有" data “,则结果中就会出现” data _ x “和” data _ y "

3、concat

concat可将多个数据集进行批量合并
df=pd.concat([df1,df2,df3],axis=0)
axis默认为0,即增加行
改为1则增加列

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值