
大家好,我是Peter~
本文主要是介绍Pandas中行和列索引的4个函数 *** 作:
[图片上传失败...(image-cd4552-1650125292352)]
快速回顾下Pandas创建索引的常见方法:
In [1]:
In [2]:
Out[2]:
新的间隔索引 IntervalIndex 通常使用 interval_range()函数来进行构造,它使用的是数据或者数值区间,基本用法:
In [3]:
Out[3]:
In [4]:
Out[4]:
以时间和日期作为索引,通过date_range函数来生成,具体例子为:
In [5]:
Out[5]:
pd.PeriodIndex是一个专门针对周期性数据的索引,方便针对具有一定周期的数据进行处理,具体用法如下:
In [6]:
Out[6]:
In [7]:
Out[7]:
In [8]:
Out[8]:
下面通过一份 简单的数据来讲解4个函数的使用。数据如下:
[图片上传失败...(image-3aca17-1650125292352)]
设置单层索引
In [10]:
[图片上传失败...(image-bfb6f-1650125292352)]
我们发现df1的索引已经变成了name字段的相关值。
下面是设置多层索引:
[图片上传失败...(image-9d4af3-1650125292352)]
对索引的重置:
[图片上传失败...(image-65ca91-1650125292352)]
针对多层索引的重置:
[图片上传失败...(image-346967-1650125292352)]
多层索引直接原地修改:
[图片上传失败...(image-7872da-1650125292352)]
将指定的数据分配给所需要的轴axis。其中axis=0代表行方向,axis=1代表列方向。
两种不同的写法:
[图片上传失败...(image-f0a50b-1650125292352)]
使用 index 效果相同:
[图片上传失败...(image-2db9bf-1650125292352)]
原来的df2是没有改变的。如果我们想改变生效,同样也可以直接原地修改:
[图片上传失败...(image-ed363a-1650125292352)]
针对axis=1或者axis="columns"方向上的 *** 作。
1、直接传入我们需要修改的新名称:
[图片上传失败...(image-7bcc7d-1650125292352)]
使用axis="columns"效果相同:
[图片上传失败...(image-a4d826-1650125292352)]
同样也可以直接原地修改:
[图片上传失败...(image-c4a86e-1650125292352)]
给行索引或者列索引进行重命名,假设我们的原始数据如下:
[图片上传失败...(image-a0b253-1650125292352)]
1、通过传入的一个或者多个属性的字典形式进行修改:
In [29]:
[图片上传失败...(image-4182d0-1650125292352)]
同时修改多个列属性的名称:
[图片上传失败...(image-10ee4d-1650125292352)]
2、通过传入的函数进行修改:
In [31]:
[图片上传失败...(image-e361db-1650125292352)]
也可以使用匿名函数lambda:
[图片上传失败...(image-87745a-1650125292352)]
In [33]:
在这里我们使用的是可视化库plotly_express库中的自带数据集tips:
[图片上传失败...(image-33140a-1650125292352)]
In [34]:
Out[34]:
In [35]:
我们发现df3其实是一个Series型的数据:
Out[35]:
In [36]:
下面我们通过reset_index函数将其变成了DataFrame数据:
[图片上传失败...(image-95459-1650125292352)]
我们把列方向上的索引重新命名下:
In [37]:
[图片上传失败...(image-110652-1650125292352)]
In [38]:
[图片上传失败...(image-59dc42-1650125292352)]
我们发现df5是df5是一个具有多层索引的数据框:
In [39]:
Out[39]:
我们可以选择重置其中一个索引:
[图片上传失败...(image-793c4e-1650125292352)]
在重置索引的同时,直接丢弃原来的字段信息: 下面的sex信息被删除
In [41]:
[图片上传失败...(image-f47489-1650125292352)]
列方向上的索引直接原地修改:
[图片上传失败...(image-3c482b-1650125292352)]
最后介绍一个笨方法来修改列索引的名称: 就是将新的名称通过列表的形式全部赋值给数据框的columns属性
[图片上传失败...(image-d313ca-1650125292353)]
在列索引个数少的时候用起来挺方便的,如果多了不建议使用。
引入pandas使用pandas下的read_csv方法,读取csv文件,参数是文件的路径,这是一个相对路径,是相对于当前工作目录的,那么如何知道当前的工作目录呢?
使用os.getcwd()方法获取当前工作目录
读取前三后数据,查看一下是否读取正确,显然都是乱码,这是什么问题呢?
我们需要设定参数encoding,也就是编码方式,如果你不设定编码方式,默认是utf8,现在csv文件是gbk编码的,所以需要使用encoding='gbk'
我用的编辑器是eric4,注意,eric4默认是不支持中文的,如果你想要显示中文,前提是设置正确的编码,在preferences中
设置成utf8即可
回到pandas,我们可以有更多选项来设置打开数据时的 *** 作:
在Python中,pandas是基于NumPy数组构建的,使数据预处理、清洗、分析工作变得更快更简单。pandas是专门为处理表格和混杂数据设计的,而NumPy更适合处理统一的数值数组数据。
使用下面格式约定,引入pandas包:
pandas有两个主要数据结构:Series和DataFrame。
Series是一种类似于一维数组的对象,它由 一组数据 (各种NumPy数据类型)以及一组与之相关的 数据标签(即索引) 组成,即index和values两部分,可以通过索引的方式选取Series中的单个或一组值。
pd.Series(list,index=[ ]) ,第二个参数是Series中数据的索引,可以省略。
Series类型索引、切片、运算的 *** 作类似于ndarray,同样的类似Python字典类型的 *** 作,包括保留字in *** 作、使用.get()方法。
Series和ndarray之间的主要区别在于Series之间的 *** 作会根据索引自动对齐数据。
DataFrame是一个表格型的数据类型,每列值类型可以不同,是最常用的pandas对象。DataFrame既有行索引也有列索引,它可以被看做由Series组成的字典(共用同一个索引)。DataFrame中的数据是以一个或多个二维块存放的(而不是列表、字典或别的一维数据结构)。
pd.DataFrame(data,columns = [ ],index = [ ]) :columns和index为指定的列、行索引,并按照顺序排列。
如果创建时指定了columns和index索引,则按照索引顺序排列,并且如果传入的列在数据中找不到,就会在结果中产生缺失值:
数据索引 :Series和DataFrame的索引是Index类型,Index对象是不可修改,可通过索引值或索引标签获取目标数据,也可通过索引使序列或数据框的计算、 *** 作实现自动化对齐。索引类型index的常用方法:
重新索引 :能够改变、重排Series和DataFrame索引,会创建一个新对象,如果某个索引值当前不存在,就引入缺失值。
df.reindex(index, columns ,fill_value, method, limit, copy ) :index/columns为新的行列自定义索引;fill_value为用于填充缺失位置的值;method为填充方法,ffill当前值向前填充,bfill向后填充;limit为最大填充量;copy 默认True,生成新的对象,False时,新旧相等不复制。
删除指定索引 :默认返回的是一个新对象。
.drop() :能够删除Series和DataFrame指定行或列索引。
删除一行或者一列时,用单引号指定索引,删除多行时用列表指定索引。
如果删除的是列索引,需要增加axis=1或axis='columns'作为参数。
增加inplace=True作为参数,可以就地修改对象,不会返回新的对象。
在pandas中,有多个方法可以选取和重新组合数据。对于DataFrame,表5-4进行了总结
适用于Series和DataFrame的基本统计分析函数 :传入axis='columns'或axis=1将会按行进行运算。
.describe() :针对各列的多个统计汇总,用统计学指标快速描述数据的概要。
.sum() :计算各列数据的和
.count() :非NaN值的数量
.mean( )/.median() :计算数据的算术平均值、算术中位数
.var()/.std() :计算数据的方差、标准差
.corr()/.cov() :计算相关系数矩阵、协方差矩阵,是通过参数对计算出来的。Series的corr方法用于计算两个Series中重叠的、非NA的、按索引对齐的值的相关系数。DataFrame的corr和cov方法将以DataFrame的形式分别返回完整的相关系数或协方差矩阵。
.corrwith() :利用DataFrame的corrwith方法,可以计算其列或行跟另一个Series或DataFrame之间的相关系数。传入一个Series将会返回一个相关系数值Series(针对各列进行计算),传入一个DataFrame则会计算按列名配对的相关系数。
.min()/.max() :计算数据的最小值、最大值
.diff() :计算一阶差分,对时间序列很有效
.mode() :计算众数,返回频数最高的那(几)个
.mean() :计算均值
.quantile() :计算分位数(0到1)
.isin() :用于判断矢量化集合的成员资格,可用于过滤Series中或DataFrame列中数据的子集
适用于Series的基本统计分析函数,DataFrame[列名]返回的是一个Series类型。
.unique() :返回一个Series中的唯一值组成的数组。
.value_counts() :计算一个Series中各值出现的频率。
.argmin()/.argmax() :计算数据最大值、最小值所在位置的索引位置(自动索引)
.idxmin()/.idxmax() :计算数据最大值、最小值所在位置的索引(自定义索引)
pandas提供了一些用于将表格型数据读取为DataFrame对象的函数。下表对它们进行了总结,其中read_csv()、read_table()、to_csv()是用得最多的。
在数据分析和建模的过程中,相当多的时间要用在数据准备上:加载、清理、转换以及重塑。
在许多数据分析工作中,缺失数据是经常发生的。对于数值数据,pandas使用浮点值NaN(np.nan)表示缺失数据,也可将缺失值表示为NA(Python内置的None值)。
替换值
.replace(old, new) :用新的数据替换老的数据,如果希望一次性替换多个值,old和new可以是列表。默认会返回一个新的对象,传入inplace=True可以对现有对象进行就地修改。
删除重复数据
利用函数或字典进行数据转换
df.head():查询数据的前五行
df.tail():查询数据的末尾5行
pandas.cut()
pandas.qcut() 基于分位数的离散化函数。基于秩或基于样本分位数将变量离散化为等大小桶。
pandas.date_range() 返回一个时间索引
df.apply() 沿相应轴应用函数
Series.value_counts() 返回不同数据的计数值
df.aggregate()
df.reset_index() 重新设置index,参数drop = True时会丢弃原来的索引,设置新的从0开始的索引。常与groupby()一起用
numpy.zeros()
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)