首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Pandas常用的两种数据类型之“Series”

关于Pandas

Pandas库基于Numpy库,提供了很多用于数据操作与分析的功能。

1.安装与使用

安装:

根据惯例,我们使用如下的方式引入pandas:

两个常用数据类型:

pandas提供两个常用的数据类型:

Series

DataFrame

In [1]:

importpandasaspd

2.Series类型

Series类型类似于Numpy的一维数组对象,可以将该类型看做是一组数据与数据相关的标签(索引)联合而构成(带有标签的一维数组对象)。

1.创建方式

Series常用的创建(初始化)方式:

列表等可迭代对象

ndarray数组对象

字典对象

标量

In [3]:

# 1. 使用列表创建series

# s=pd.Series([1,2,3])

# # 左边的0 1 2 位置标签 key

# print(s,type(s))

# 2.使用字典来创建,可以直接使用字典类型指定每个元素的标签

s=pd.Series({"a":10,"b":20,"c":30})

print(s)

a 10

b 20

c 30

dtype: int64

2.相关属性

index

values

shape

size

dtype

Series对象可以通过index与values访问索引与值。其中,我们也可以通过修改index属性来修改Series的索引。

说明:

如果没有指定索引,则会自动生成从0开始的整数值索引,也可以使用index显式指定索引。

当数值较多时,可以通过head与tail访问前 / 后N个数据。

Series对象的数据只能是一维数组类型。

In [10]:

# index属性 创建了series的时候,每个元素的标签,就是index

# 如果创建的时候,没有指定index属性,使用0 1 2....位置索引来充当index

# 如果指定了index,使用指定的值来充当表标签

# s=pd.Series([1,2,3],index=["a","b","c"])

# 索引能不能用整数来充当呢?可以,但是不建议这样使用

s=pd.Series([1,2,3],index=[2,3,4])

# s

# s[2]

print(s.shape)# size都是用来显示series中有多少个元素的

(3,)

3.Series相关操作

Series在操作上,与Numpy数据具有如下的相似性:

支持广播与矢量化运算。

支持索引与切片。

支持整数数组与布尔数组提取元素。

1.运算

Series类型也支持矢量化运算与广播操作。计算规则与Numpy数组的规则相同。同时,Numpy的一些函数,也适用于Series类型,例如,np.mean,np.sum等。

多个Series运算时,会根据索引进行对齐。当索引无法匹配时,结果值为NaN(缺失值)。

说明:

我们可以通过pandas或Series的isnull与notnull来判断数据是否缺失。

除了运算符以外,我们也可以使用Series对象提供的相关方法进行运算【可以指定缺失的填充值】。

尽管Numpy的一些函数,也适用于Series类型,但Series与ndarray数组对于空值NaN的计算处理方式上是不同的。【Numpy的计算,会得到NaN,而Series会忽略NaN】

In [12]:

# s1=pd.Series([1,2,3])

# s2=pd.Series([10,20,30])

# s1+1

# s1+s2

Out[12]:

0 11

1 22

2 33

dtype: int64

2.索引

标签索引与位置索引

如果Series对象的index值为非数值类型,通过[索引]访问元素,索引既可以是标签索引,也可以是位置索引。这会在一定程度上造成混淆。我们可以通过:

loc 仅通过标签索引访问。

iloc 仅通过位置索引访问。

这样,就可以更加具有针对性去访问元素。

整数数组索引与布尔数组索引

Series也支持使用整数数组与布尔数组进行索引。与Numpy数组相同,二者返回的是原数组数据的拷贝(复制)。

说明:

与ndarray数组的整数索引不太相同,Series的整数数组索引,既可以是标签数组索引,也可以是位置数组索引。

In [30]:

# s=pd.Series([1,2,3],index=[10,20,30])

# s[index]

# s[0]

# s[10]

# 不建议直接使用s[index] index可能是位置标签,也可能是名字标签

# 如果一个series有了index标签,位置索引失效。

#为了使用位置索引和标签索引清晰,series单独提供了,标签索引方式和位置索引方式

#loc 仅通过标签索引访问。

#iloc 仅仅通过位置进行访问

s=pd.Series([1,2,3],index=[10,20,30])

# s.loc[10]

s.iloc[]

# s.ix[index] 老版本 先以标签优先查找,如果标签没找到,则按照位置 不建议使用。

# series可以使用整数数组作为索引,用来提取多个元素(跟numpy一致)

s.iloc[],s.iloc[1]

li_index=[,1]

s.iloc[li_index]

li_keys=[10,20]

s.loc[li_keys]

# series可以使用布尔数组作为索引,s[布尔数组],可以将true对应的元素留下,其余去掉

#使用的时候,与或非的规则跟numpy一致

s[[True,False,False]]

s=pd.Series(range(20))

s_b=s>10

s[s_b]

Out[30]:

0 0

1 1

2 2

3 3

4 4

5 5

6 6

7 7

8 8

9 9

10 10

dtype: int64

3.切片

Series也支持切片访问一个区间的元素。与Numpy的数组相同,切片返回的是原数组数据的视图。

In [38]:

s=pd.Series(range(20),index=range(100,120))

s

# 切片获取的时候,也依然遵从索引获取方式,分成按照位置进行切片和按照标签进行切片

# loc切片,则按照标签名切 包含start,也包含end

# iloc切片,则按照位置进行切 包含start,不包含end

s.iloc[5:10]

s.loc[104:109]

s=pd.Series(range(5),index=["a","b","c","d","e"])

s.loc["d"]

s.loc["b":"d"]

Out[38]:

b 1

c 2

d 3

dtype: int64

4.Series的CRUD

Series索引-数值CRUD操作:

获取值

修改值

增加索引-值

删除索引-值

In [48]:

s=pd.Series(range(5),index=["a","b","c","d","e"])

# (1)获取元素

# iloc或者loc

# (2)增加

s.loc["f"]=5

# (3)修改

s.loc["f"]=50

s

# (4)删除

# s.drop(标签)

# inplace :false默认,代表是否进行原地修改。

# 效率特别重要,原地操作不需要占用额外的内存。如果源数据对后期使用不大,可以进行原地操作,来节省内存。inplace设置成True

# s.drop("a")

s.drop("a",inplace=True)

s

Out[48]:

b 1

c 2

d 3

e 4

f 50

dtype: int64

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20191121A0JXUX00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券