pandas中Series和DataFrame的使用(数据分析)

317 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第15天,点击查看活动详情

1.环境配置及库包要求

  1. pandas库 1.2.4版本
  2. python3.8
  3. jupyter notebook环境运行

2.pandas数据结构

pandas中有两个主要的数据结构:Series和DataFrame。

2.1 Series

Series是一种类似于一维数组的对象,它由一组数据(各种Numpy数据类型)以及一组与之相关的数据标签(即索引)组成。仅由一组数据即可产生最简单的Series:

image.png

temp=pd.Series([3,4,23,32,16,23,43,38,39])
temp

我们可以清晰的看出:索引在左边,值在右边。Series会自动创建一个0到N-1(N为数据的长度)的整数型索引。也可以通过Series的values和index属性获取其数组表示形式和索引对象:

image.png

temp.values
temp.index

image.png

temp2=pd.Series([4,12,35,9],index=['a','b','c','d'])
temp2

对于许多应用来说,Series最重要的一个功能是,可以根据运算的索引标签自动对齐数据: image.png

temp3=pd.Series([4,12,35,9],index=['a','b','c','d'])
temp4=pd.Series([100,100,100,100],index=['m','b','c','d'])
temp3+temp4

Series的索引可以通过赋值的方式就地修改:

image.png

temp3=pd.Series([4,12,35,9],index=['a','b','c','d'])
temp3.index=['A','B','C','D']#将索引就地更改
temp3

2.2 DataFrame

DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等)。DataFrame中的数据是以一个或多个二维块存放的。建DataFrame的办法有很多,最常用的一种就是直接传入一个由等长列表或Numpy数组组成的字典:

image.png

data={'state':['ohio','hjki','like','love','most','wonderful'],'year':[2000,2001,2002,2003,2004,2005],'pop':[1.5,1.7,2.5,2.4,2.7,6.4]}
frame=pd.DataFrame(data)
frame

当然如果传入的数据找不到,就会在结果中产生缺失值:

image.png

frame2=pd.DataFrame(data,columns=['year','state','pop','four'],index=[1,2,3,4,5,6])
frame2

可以通过类似字典标记的方式或属性的方式,可以将DataFrame的列获取为一个Series:

image.png

frame2['pop']

frame2[column]适用于任何列的名,但是frame2.column只有在列名是一个合理的Python变量名时才适用。

列可以通过赋值的方式进行修改。例如,我们可以给空的'four'赋上一个标量值或一组值:

image.png

frame2['four']=[1,2,3,4,4,5]
frame2

这里我们需要注意一点:将列表或数组赋值给某个列时,其长度必须跟DataFrame的长度相匹配。如果赋值的是一个Series,就会精确匹配DataFrame的索引,所有的空位都将被填上缺失值。

为不存在的列赋值会创建出一个新列。关键字del用于删除列。作为del的例子,我们先添加再删除:

image.png

frame2['five']=frame2.year==2002
frame2

接下来我们进行删除操作:

image.png

del frame2['five']
frame2

注意:通过索引方式返回的列只是相应数据的视图而已,并不是副本。因此,对返回的Series所做的任何就地修改全都会反映到源DataFrame上。通过Series的copy方法即可指定复制列。