Pandas的常用方法

您所在的位置:网站首页 pandas的 Pandas的常用方法

Pandas的常用方法

2022-06-10 17:28| 来源: 网络整理| 查看: 265

Python Data Analysis Library或Pandas是基于Numpy的一种工具,该工具是为了解决数据分析任务而创建的。

Pandas纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需要的工具。

Pandas提供了大量能使我们快速便捷的处理数据的函数和方法。

导入: import pandas as pd import numpy as np Pandas的基本数据结构:

pandas中有两种常用的基本结构:

•Series 一维数组,与Numpy中的一维数组array类似,二者与Python基本的数据结构List也很相似。特殊的是,Series能保存不同种数据类型,字符串、boolean值、数字等都能保存在Series种。

•DataFrame 二维的表格型数据结构,很多功能与R种的data.frame类似。可以将DataFrame理解为Series的容器。(R语言的数据框)

Series: ##一维Series可以用一维列表初始化,元素的数据类型可以不同 >>> a=pd.Series([1,3,5,np.nan,6,5]) >>> a 0 1.0 1 3.0 2 5.0 3 NaN 4 6.0 5 5.0 dtype: float64 ##默认的情况下,Series的下标都是数字,也可以使用额外参数指定,类型是统一的。 >>> b=pd.Series([1,3,5,np.nan,6,5],index=['a','b','c','d','e','f']) >>> b a 1.0 b 3.0 c 5.0 d NaN e 6.0 f 5.0 dtype: float64 ##索引——数据行标签 >>> a.index RangeIndex(start=0, stop=6, step=1) >>> b.index Index(['a', 'b', 'c', 'd', 'e', 'f'], dtype='object') ##取值 >>> a.values array([ 1., 3., 5., nan, 6., 5.]) >>> a[0] 1.0 ##切片 >>> a[2:5] 2 5.0 3 NaN 4 6.0 dtype: float64 >>> b['b':'f':2] #闭区间 b 3.0 d NaN f 5.0 dtype: float64 ##索引赋值(给索引取个好名字) >>> a.index.name='索引' >>> a 索引 0 1.0 1 3.0 2 5.0 3 NaN 4 6.0 5 5.0 dtype: float64 ##列表赋值给索引 >>> a.index=list('abcdef') >>> a a 1.0 b 3.0 c 5.0 d NaN e 6.0 f 5.0 dtype: float64  DataFrame: ###DataFrame初始化 ##DataFrame是个二维结构,这里首先构造一组时间序列,作为第一维的下标 >>> date=pd.date_range('20200101',periods=6) >>> print(date) DatetimeIndex(['2020-01-01', '2020-01-02', '2020-01-03', '2020-01-04', '2020-01-05', '2020-01-06'], dtype='datetime64[ns]', freq='D') ###创建一个DataFrame结构 ##默认使用0、1、2...,作为索引index >>> df=pd.DataFrame(np.random.randn(6,4)) >>> df 0 1 2 3 0 0.271304 -0.456538 -0.130672 0.051294 1 1.469260 0.662314 -0.605442 0.840491 2 0.427533 -1.519090 0.939244 0.208238 3 1.161155 1.081891 -0.747801 0.640726 4 1.318555 1.366389 0.861919 0.671478 5 -0.723027 0.219248 0.310172 -0.924437 ##index参数设置行索引,columns参数设置列索引 >>> df=pd.DataFrame(np.random.randn(6,4),index=date,columns=list('ABCD')) >>> df A B C D 2020-01-01 0.543428 0.049488 1.029735 0.650910 2020-01-02 -0.018345 -0.152546 -0.412190 0.051431 2020-01-03 0.288006 -0.684187 0.077385 0.849828 2020-01-04 1.433992 0.364107 0.540096 -2.032458 2020-01-05 0.451552 -1.267634 2.141649 -1.733130 2020-01-06 -0.131996 0.458916 2.097127 0.157309 ###除了向DataFrame中传入二维数组,我们也可以使用字典传入数据 ##字典的每个key代表一列,其value可以是各种能够转化为Series的对象 >>> df1=pd.DataFrame({'A':1,'B':pd.Timestamp('20200101'),'C':pd.Series(1,index=list(range(4)),dtype=float),'D':np.array([3]*4,dtype=int),'E':pd.Categorical(['test','train','test','train']),'F':'abc'}) >>> df1 A B C D E F 0 1 2020-01-01 1.0 3 test abc 1 1 2020-01-01 1.0 3 train abc 2 1 2020-01-01 1.0 3 test abc 3 1 2020-01-01 1.0 3 train abc ##与Series要求所有的类型都一致不同,DataFrame只要求每一列数据的格式以及类型相同 >>> df1.dtypes A int64 B datetime64[ns] C float64 D int32 E category F object dtype: object ###查看头尾数据 ##head和tail方法可以分别查看最前面几行和最后面几行的数据(默认为5) >>> df.head() A B C D 2020-01-01 0.543428 0.049488 1.029735 0.650910 2020-01-02 -0.018345 -0.152546 -0.412190 0.051431 2020-01-03 0.288006 -0.684187 0.077385 0.849828 2020-01-04 1.433992 0.364107 0.540096 -2.032458 2020-01-05 0.451552 -1.267634 2.141649 -1.733130 >>> df.tail(3) A B C D 2020-01-04 1.433992 0.364107 0.540096 -2.032458 2020-01-05 0.451552 -1.267634 2.141649 -1.733130 2020-01-06 -0.131996 0.458916 2.097127 0.157309 ##下标使用index属性查看索引值 >>> df.index DatetimeIndex(['2020-01-01', '2020-01-02', '2020-01-03', '2020-01-04', '2020-01-05', '2020-01-06'], dtype='datetime64[ns]', freq='D') ##列标使用columns属性查看 >>> df.columns Index(['A', 'B', 'C', 'D'], dtype='object') ##数据值使用values查看 >>> df.values array([[ 0.54342773, 0.04948755, 1.0297351 , 0.65090957], [-0.01834507, -0.15254608, -0.41218954, 0.05143094], [ 0.28800614, -0.68418689, 0.07738548, 0.84982819], [ 1.43399207, 0.36410724, 0.5400965 , -2.03245796], [ 0.45155238, -1.2676336 , 2.14164888, -1.73312973], [-0.13199643, 0.45891597, 2.09712718, 0.15730857]])

 

 Pandas读取数据及数据操作:(下面只介绍一些操作的具体功能,在此就不通过运行代码实现了): df_mv=pd.read_excel(r'D:\Desktop\test.xlsx') #前面加一个r,防止转义字符的干扰,这里是打开一个Excel文件 行操作: df_mv.iloc[0]  #查看第一行的内容 df_mv.iloc[0:5]  #查看前五行的内容 df_mv.loc[0:5]  #这个方法是一个完全的闭区间,查看前六行的内容 df_mv=df_mv.drop([index]) #添加索引代号,删除某一行的内容 dit={'名字':'复仇者联盟3',      '投票人数':123456,      '类型':'剧情/科幻',      '产地':'美国',      '上映时间':'2017-05-04 00:00:00',      '时长':142,      '年代':2017,      '评分':8.7,      '首映地点':'美国'}             s=pd.Series(dit)     #想要添加一个行的操作,就先建立一个新的Series s.name=38738        #也就是建立索引号 s                              #一定要带上双引号呀,而且必须是英文状态下的标点符号 df_mv=df_mv.append(s)  #类似列表的添加方式 列操作: df_mv.columns    #查看列的具体属性 df_mv['名字'][0:5]  #查看列的具体内容,双索引 [' 列名 '][index] df_mv[['名字','类型']][:5]    #查看多列的具体内容,使用列表的形式   df_mv['序号']=range(1,len(df_mv)+1)    #直接创建新的一列,与R语言极其相似,就是直接添加 df_mv=df_mv.drop('序号',axis=1)  #删除一列的操作 :axis默认为0,横向,改为1,即为纵向 选择数据: ##通过标签选择数据: df.loc[[index],[column]] #通过标签选择数据 df_mv.loc[[1,3,4],['名字','评分']]    #先行后列,这个是多行多列 df_mv.loc[1,'名字'] ##条件选择: df_mv[df_mv['产地']=='中国大陆'][:5]  #选取产地为中国大陆的前五个电影内容 df_mv[(df_mv.产地=='美国')&(df_mv.评分>9)].head() #选取产地为美国,且评分大于9的电影 df_mv[((df_mv.产地=='美国')|(df_mv.产地=='中国大陆'))&(df_mv.评分>9)].head()  #选取产地为美国或中国大陆,且评分大于9的电影 数据清洗: 缺失值处理:

dropna:根据标签中的缺失值进行过滤,删除缺失值

fillna:对缺失值进行填充

isnull:返回一个布尔值对象,判断哪些值是缺失值

notnull:isnull的否定式

df.dropna(参数) subset=['列名']:删除该列为空的行 how='all':删除全为空值的行或列inplace=True:覆盖之前的数据 axis=0:选择行或列(=0,删除一行;=1,删除一列),默认为0(这个经常出现,也就是删除行)

异常值处理:

异常值,即在数据集中存在不合理的值,又称离群点。比如年龄为-1,笔记本电脑重量为1吨等等,都属与异常值的范围。

对于异常值,一般来说数量都会很少,在不影响整体数据分布的情况下,我们直接删除就可以了。

数据保存:

数据处理之后,然后将数据重新保存到原文件。

df_mv.to_excel('test.xlsx') ##数据保存,这很重要 Pandas操作: 数据格式转换:

df['投票人数'].dtype   #查看列的数据类型

df['投票人数']=df['投票人数'].astype('int')      #astype转换方法,格式转换

可以通过数据的格式转换,检查出一些异常值

排序: ###单值排序 ##默认索引排序 df[:10] ##根据index进行排序 ##默认升序排列,改变排序标准 df.sort_values(by='投票人数')[:5] ##降序排列 df.sort_values(by='投票人数',ascending=False)[:5]#ascending是升序的意思 ###多值排序 ##也就是按照多个标准先后排序 df.sort_values(by=['评分','投票人数'],ascending=False)[:5] ##先降序,后升序 df.sort_values(by=['评分','投票人数'],ascending=[False,True])[:5] 基本统计分析:

对dataframe中的数值数据进行描述性统计

dataframe.describe()

通过描述性统计,可以发现一些异常值,很多异常值往往是需要我们逐步去发现的 。

删除行后,需要重新分配索引 index , df.index=range(len(df))  # 长度函数len()

最值和求和:max(),min(),sum()

均值和中值:mean(),median()

方差和标准差:var(),std()

## 相关系数 df[['投票人数','评分']].corr()

## 协方差矩阵 df[['投票人数','评分']].cov()

 重复数据处理与计数: ## 某列的所有不同的取值,重复值不统计,统计唯一值!!!数组形式输出 df['产地'].unique() ##重复数据替换 df['产地'].replace('USA','美国',inplace=True) #右边替换左边,就地覆盖操作 df['产地'].replace(['西德','苏联'],['德国','俄罗斯'],inplace=True)#多替换使用列表就行替换 ##value_counts()方法计数,默认是从大到小的排序,计算每一年的总数 df['年代'].value_counts()[:10] 数据透视:

Pandas提供了一个数据透视表功能,名为pivot_table。 使用pivot_table的一个挑战是,你需要确保你理解你的数据,并清楚的知道你通过透视表解决了什么问题。

虽然pivot_table看起来知识一个简单的函数,但是它能够快速的对数据进行强大的分析。应该类似于数据库的视图view。(针对数值型列)

pd.set_option('max_columns',100) ##设置显示的最大列 pd.set_option('max_rows',500) ##设置显示的最大行,方便查看所有的结果信息 pd.pivot_table(df,index=['年代']) ##需要一个dataframe参数,还要有个索引,默认的数值运算时:数值型变量的均值。 ##多个索引index=['',''] ##实际上,大多数的pivot_table参数可以通过列表获取多个值作为索引 pd.pivot_table(df,index=['年代','产地']) ##指定需要统计汇总的数据values #去除不需要的默认值参数,显示需要的参数列 pd.pivot_table(df,index=['年代','产地'],values=['评分']) ##指定函数aggfunc() pd.pivot_table(df,index=['年代','产地'],values=['投票人数'],aggfunc=np.sum) #改变默认的聚合运算,求和值代替平均值 ##通过将“投票人数”和“评分”列进行对应分组,对“产地”实现数据聚合和总结 pd.pivot_table(df,index=['产地'],values=['投票人数','评分'],aggfunc=[np.sum,np.mean]) ##非数值处理 fill_value #非数值(NaN)难以处理,如果想移除他们,可以使用 fill_value 将其设置为0 pd.pivot_table(df,index=['产地'],aggfunc=[np.sum,np.mean],fill_value=0) ##计算总合数据 margins=True pd.pivot_table(df,index=['产地'],aggfunc=[np.sum,np.mean],fill_value=0,margins=True) #计算每一列的总和数据 ###对不同值执行不同函数 ##可以向aggfunc传递一个字典。不过,这样做有一个副作用,那就是必须将标签做的更加简洁才性。 #对各个产地的投票人数求和,对评分求均值,使用字典,传入键对值 pd.pivot_table(df,index=['产地'],values=['投票人数','评分'],aggfunc={'投票人数':np.sum,'评分':np.mean},fill_value=0) ##按照多个索引来进行汇总 pd.pivot_table(df,index=['产地','年代'],values=['投票人数','评分'],aggfunc={'投票人数':np.sum,'评分':np.mean},fill_value=0) 透视表过滤,本身就是一个dataframe,所以操作相同呀!!!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3