dataframe转series 相减_D05 Pandas之Series详解,从构造开始,深度解析Series


title: D05|Series详解,从构造开始,深度解析Series
author: Adolph Lee
categories: 数据挖掘基础
tags:

  • Python
  • 数据挖掘基础
  • Pandas
  • Series

dataframe转series 相减_D05 Pandas之Series详解,从构造开始,深度解析Series_第1张图片

写在前面

本文使用的是pandas0.25.3,从0.25开始起pandas将只支持Python3.53以上版本,不再支持Python2.7。且在0.25版本中三维数组Panel完全被官方移除了,新版本删除了很多也新增了很多方法属性。对于那些已经取消或者将要取消的,我们不再提及。时代在进步,一起向前看。

什么是Series

Series是pandas特有,能够保存任何类型数据(整数、字符串、浮点数、Python对象等)的一维数组。

Series的构造函数

Series(data, index, dtype, name, copy, fastpath)

参数详解

  •   data 需要构造的数据(如数组,可迭代对象,标量等)
  •   index 行索引,索引值必须是唯一的,散列的,默认是通过np.arange(n)构造的自增索引
  •   dtype 指定数据类型,如果没有指定,程序将会自动判断
  •   copy 是否复制data数据,默认为false
  •   name 为Series命名
  •   fastpath 这个参数在官方api文档中并没有给出具体解释,从源码来看应当是一种快速精简模式,默认值为false

构造一个Series

# 构造一个Seriesimport pandas as pdSeries_1d = pd.Series(['Arya','Jaime','Tyrone'],index=['a','b','c'],dtype='object',name='冰与火之歌')print(Series_1d)
be729604822b4cccb5f40d0ae0bb0afd.png

Series属性

  •   Series.index 返回一个Pandas的Index对象,其值为行索引
  •   Series.values 返回一个ndarray,其值为Series的值
  •   Series.array 返回一个PandasArray对象,其值为Series的值
  •   Series.dtype 返回Series的数据类型
  •   Series.shape 返回Series的形状,与numpy一样,用(m,n)表示
  •   Series.nbytes 返回Series内数据所使用的存储空间
  •   Series.ndim 返回Series内数据维度
  •   Series.size 返回Series内数据的元素个数
  •   Series.T 转置Series,当然,一维数组怎么转都一样
  •   Series.memory_usage() 返回整个Series对象所占用内存空间,而不仅仅是其中的数据
  •   Series.hasnans 检测数组中是否包含空值,在pandas中空值使用NaN表示,使用numpy.nan可构造,Python的基础数据结构None也属于空值,返回True or False
  •   Series.empty 检测数组是否为空,返回True or False
  •   Series.dtypes 返回Series的数据类型
  •   Series.name 返回Series的名称
    观察一下这些属性,对理解Series与后面将会讲到的DataFrame会很有帮助
import pandas as pdSeries_1d = pd.Series(['Arya','Jaime','Tyrone'],index=['a','b','c'],dtype='object',name='冰与火之歌')print(Series_1d)Series_1d['d'] = 'Imp'print(Series_1d)
dataframe转series 相减_D05 Pandas之Series详解,从构造开始,深度解析Series_第2张图片

Series的增、查、改、删

接下来的内容主要以Series的增、查、改、删为主线来刨析Series,而官方给出的文档中更倾向于转换、索引、切片、运算、时序模式等API接口为主线来讲解。如果讲解详细的api一是过于繁杂,二是不如直接去看官方文档来得直接,因此以数据的增、查、改、删为基准来讲解,更容易为大家理解和使用。对于想更深入了解的朋友,可以去阅读官方文档。

向Series中插入元素

利用索引

import pandas as pdSeries_1d = pd.Series(['Arya','Jaime','Tyrone'],index=['a','b','c'],dtype='object',name='冰与火之歌')print(Series_1d)Series_1d['d'] = 'Imp'print(Series_1d)
4bab4bc136931eb00d49baa333d504d9.png

append

Series.append(self, to_append, ignore_index=False, verify_integrity=False)

  •   to_append 需要增加的数据,可以是Series,或Series元组/列表
  •   ignore_index 是否忽略行索引,默认为False,若为True则不使用原有的行索引,会生成新的索引值
  •   verify_integrity 校验行索引值是否重复,若重复则抛出异常,默认为False
  •   append不会改变原来的一维数组
import pandas as pdseries_1d = pd.Series(['Arya','Jaime','Tyrone'],index=['a','b','c'],dtype='object',name='冰与火之歌')print(series_1d)new_series_1d = series_1d.append(pd.Series('Imp',index=['d']))print(series_1d)print(new_series_1d)# 使用ignore_index参数new_series_1d = series_1d.append(pd.Series('Imp',index=['d']),ignore_index=True)print(new_series_1d)# 使用verify_integrity参数,当索引重复时会抛出异常 ,将索引改为 d 即可正常运行new_series_1d = series_1d.append(pd.Series('Imp',index=['c']),verify_integrity=True)print(new_series_1d)
dataframe转series 相减_D05 Pandas之Series详解,从构造开始,深度解析Series_第3张图片

查看Series中的元素

我们可以像访问列表一样通过索引访问Series中的元素,Series的索引默认从0开始,最后一个元素可以用负一表示。同时pandas还提供了许多其它的方法帮助我们访问Series中的元素,如at,iat,loc,iloc,get等。下面我们将会一一讲解这些方法。并帮助大家剖析这些方法的异同。

利用索引

  •   当使用默认行索引值的时候,索引从0开始
  •   最后一个索引可用-1表示,但却不能直接通过诸如 series[-1]来访问,因为[-1]表示的是一个具体的索引值,当索引不存在时,会抛出异常
  •   当使用指定索引值的时候,也可通过索引值直接访问
  •   当利用索引访问多个元素时,返回结果是一个具有相同属性的Series

import pandas as pd# 通过索引访问单个元素series_1d = pd.Series(['Arya','Jaime','Tyrone'],index=['a','b','c'],dtype='object',name='冰与火之歌')print(series_1d['a'])series_1d = pd.Series(['Arya','Jaime','Tyrone'],dtype='object',name='冰与火之歌')print(series_1d[1])# 通过索引访问多个元素series_1d = pd.Series(['Arya','Jaime','Tyrone','Imp'],dtype='object',name='冰与火之歌')print(series_1d[1:-1])

dataframe转series 相减_D05 Pandas之Series详解,从构造开始,深度解析Series_第4张图片

get

Series.get(self, key, default=None)

  •   get方法是通过行索引获取行索引对应的元素
  •   每次只能获取一个元素
  •   若无对应的索引,则返回default值
  •   key 行索引值
  •   default 未找到索引时的返回值,默认为None

import pandas as pd# 通过索引访问单个元素series_1d = pd.Series(['Arya','Jaime','Tyrone'],dtype='object',name='冰与火之歌')print(series_1d.get(0))print(series_1d.get(5,default=9999))
dataframe转series 相减_D05 Pandas之Series详解,从构造开始,深度解析Series_第5张图片

at

Series.at[]

  •   通过索引名称来访问
  •   返回满足索引条件的单个值
  •   当索引不存在时,会抛出异常
import pandas as pdseries_1d = pd.Series(['Arya','Jaime','Tyrone'],dtype='object',name='冰与火之歌')print(series_1d.at[0])series_1d = pd.Series(['Arya','Jaime','Tyrone'],index=['a','b','c'],dtype='object',name='冰与火之歌')print(series_1d.at['a'])
55ab50eb63be0f6d8dbab2e1f626b48a.png

iat

Series.iat[]

  •   iat只能通过整型索引访问,其是通过元素位置来访问元素
  •   就算是已经自定义行索引,同样也可以通过整型索引访问
  •   当索引不存在时,会抛出异常
import pandas as pdseries_1d = pd.Series(['Arya','Jaime','Tyrone'],index=['a','b','c'],dtype='object',name='冰与火之歌')print(series_1d.iat[2])series_1d = pd.Series(['Arya','Jaime','Tyrone'],dtype='object',name='冰与火之歌')print(series_1d.iat[0])
b3957be0efecb10102643f265a1a1440.png

loc

Series.loc[]

  •   通过索引名称或者布尔值列表去访问元素
  •   可以一次访问多个元素
  •   当访问多个元素时,需要用中括号括起来
  •   当访问多个元素时,返回结果是一个具有相同属性的Series
  •   当索引不存在时,会抛出异常
import pandas as pdseries_1d = pd.Series(['Arya','Jaime','Tyrone'],index=['a','b','c'],dtype='object',name='冰与火之歌')print(series_1d.loc['a'])print(series_1d.loc[['a','b']])print(series_1d[[True,False,True]])series_1d = pd.Series(['Arya','Jaime','Tyrone'],dtype='object',name='冰与火之歌')print(series_1d[0:-1])
dataframe转series 相减_D05 Pandas之Series详解,从构造开始,深度解析Series_第6张图片

iloc

Series.iloc[]

  •   通过元素位置或布尔值列表访问元素
  •   可以一次访问多个元素
  •   当访问多个元素时,需要用中括号括起来
  •   当访问多个元素时,返回结果是一个具有相同属性的Series
  •   当索引不存在时,会抛出异常
import pandas as pdseries_1d = pd.Series(['Arya','Jaime','Tyrone'],index=['a','b','c'],dtype='object',name='冰与火之歌')print(series_1d.iloc[0])print(series_1d.iloc[[2,0]])print(series_1d[[True,False,True]])series_1d = pd.Series(['Arya','Jaime','Tyrone'],dtype='object',name='冰与火之歌')print(series_1d[0:-1])
dataframe转series 相减_D05 Pandas之Series详解,从构造开始,深度解析Series_第7张图片

小结:get、at、loc都是通过索引名称去定位元素,iat、iloc则是通过元素位置来定位。loc、iloc都可以通过布尔值来访问元素

head() tailf()

  •   head 查看Series的前n行,默认为5
  •   tail 查看Series的后n行,默认为5
import pandas as pdimport numpy as npseries_1d = pd.Series(np.arange(0,20))print(series_1d.head())print(series_1d.head(3))print(series_1d.tail())print(series_1d.tail(3))
dataframe转series 相减_D05 Pandas之Series详解,从构造开始,深度解析Series_第8张图片

遍历访问

直接遍历

  •   直接遍历只会遍历,Series的值
import pandas as pdseries_1d = pd.Series(['Arya','Jaime','Tyrone'],index=['a','b','c'],dtype='object',name='冰与火之歌')for element in series_1d:    print(element)
a0698a45855f6b7ad67856c8acf35bf3.png

利用items 或 iteritems

  •   两种方法都会返回一个元组,(索引,值)
  •   从源码来看两者没有不同
import pandas as pdseries_1d = pd.Series(['Arya','Jaime','Tyrone'],index=['a','b','c'],dtype='object',name='冰与火之歌')for element in series_1d.items():    print(element)
eab59166cdceb1dc6571ede77dad6a88.png

item

  •   快速访问第一个元素
import pandas as pd series_1d = pd.Series(['Arya','Jaime','Tyrone'],index=['a','b','c'],dtype='object',name='冰与火之歌')print(series_1d.item())

e6fd1252abbdb7bcac0f766aee5b5778.png

keys、values

  •   类似字典的{key:values},
  •   快速访问series中的所有行索引
  •   快速访问series中的所有值
  •   keys返回的是一个Series,这个Series的值即为行索引值
import pandas as pdseries_1d = pd.Series(['Arya','Jaime','Tyrone'],index=['a','b','c'],dtype='object',name='冰与火之歌')print(series_1d.keys().values)print(series_1d.values)
6306491d326bd0df3cd185f4f2a6673e.png

修改Series中的元素

replace

replace(self, to_replace=None, value=None, inplace=False, limit=None, regex=False, method=’pad’)

  •   to_replace 需要被替换的值,可以是一个或者多个,甚至是一个Series
  •   value 替换值,可以是一个或者多个,甚至是一个Series
  •   inplace 当inplace为True时replace不会有任何返回值,是在原数组基础上修改。当inplace为False时,返回一个新的Series,默认为False
  •   剩下的几个参数limit、regex、method在这里不做详解,以后会逐渐使用到,感兴趣的朋友可以去查看pandas官方api。
import pandas as pdimport numpy as npseries_1d = pd.Series(np.arange(0,5),index=['a','b','c','d','e'])new_series_1d = series_1d.replace(3,3333)print(new_series_1d)new_series_1d = series_1d.replace([3,2,1],[333,2222,111])print(new_series_1d)series_1d.replace([3,2,1],[333,2222,111],inplace=True)print(series_1d)
dataframe转series 相减_D05 Pandas之Series详解,从构造开始,深度解析Series_第9张图片

update

  •   通过索引修改元素
  •   入参是一个Series
  •   如果传入NaN则不会被接受
  •   索引不存在或不相同的元素不会产生改变
import pandas as pdimport numpy as npseries_1d = pd.Series(np.arange(0,5))series_1d.update(pd.Series(['a','b',np.nan,'e'],index=[2,3,4,5]))print(series_1d)
dataframe转series 相减_D05 Pandas之Series详解,从构造开始,深度解析Series_第10张图片

删除元素

drop

drop(self, labels=None, axis=0, index=None, columns=None, level=None, inplace=False, errors=’raise’)

  •   labels 需要删除索引值,
  •   axis 指定行、列(DataFrame使用) ,默认axix = 0 行序
  •   index 使用index指定索引,这个属性其实有点多余
  •   columns 可以使用列索引来代替值(DataFrame使用)
  •   level 对于多索引来说,将删除标签级别
  •   inplace 如果为真则在原Series基础上修改,并返回None,默认为False
  •   errors 忽略异常,默认为raise 不忽略 ,为None时忽略
import pandas as pdimport numpy as npseries_1d = pd.Series(np.arange(0,5))new_series_1d = series_1d.drop(3)print(new_series_1d)new_series_1d = series_1d.drop([3,2])print(new_series_1d)series_1d = pd.Series(np.arange(0,5),index=['a','b','c','d','e'])new_series_1d = series_1d.drop(['a','e'])print(new_series_1d)new_series_1d = series_1d.drop(index=['a','e'])print(new_series_1d)
dataframe转series 相减_D05 Pandas之Series详解,从构造开始,深度解析Series_第11张图片

pop

  •   通过索引删除元素,并返回被删除的元素值
import pandas as pdimport numpy as npseries_1d = pd.Series(np.arange(0,5),index=['a','b','c','d','e'])new_series_1d = series_1d.pop('b')print(new_series_1d)
dataframe转series 相减_D05 Pandas之Series详解,从构造开始,深度解析Series_第12张图片

快速删除空值

dropna(self, axis=0, inplace=False, **kwargs)

  •   默认为0,且只可为0
  •   当inplace为True时replace不会有任何返回值,是在原数组基础上修改。当inplace为False时,返回一个新的Series,默认为False
  •   **kwargs未使用
import pandas as pdimport numpy as npSeries_1d = pd.Series(['Arya','Jaime','Tyrone',np.nan],index=['a','b','c','d'],dtype='object',name='冰与火之歌')Series_1d.dropna()
a0e97ee922bfbe90646d41e29b7335b0.png

快速删除重复值

drop_duplicates(self, keep=’first’, inplace=False)

  •   keep first保留重复值的第一个,删除其它。默认值为first
  •   keep last保留重复值的最后一个,删除其它。
  •   keep False删除所有重复值
  •   当inplace为True时replace不会有任何返回值,是在原数组基础上修改。当inplace为False时,返回一个新的Series,默认为False
import pandas as pdseries_1d = pd.Series(['a','a','v','b','c','a','b'])new_series_1d = series_1d.drop_duplicates()print(new_series_1d)new_series_1d = series_1d.drop_duplicates(keep='last')print(new_series_1d)series_1d.drop_duplicates(keep=False,inplace=True)print(series_1d)

dataframe转series 相减_D05 Pandas之Series详解,从构造开始,深度解析Series_第13张图片

限于篇幅,关于Series就暂时介绍这么多,更多干货,请关注头条号:全民编程

转载请注明出处 ​

你可能感兴趣的:(相减,python,pd,Series,添加行,python,Series,添加行)