python series取值_Python数据分析-Pandas(Series与DataFrame)

  • Post author:
  • Post category:python


Pandas介绍:

pandas是一个强大的Python数据分析的工具包,是基于NumPy构建的。

Pandas的主要功能:

1)具备对其功能的数据结构DataFrame、Series

2)集成时间序列功能

3)提供丰富的数学运算和操作

4)灵活处理缺失数据

python里面安装、引入方式:

安装方法:pip install pandas

引用方法:import pandas as pd

Series数组的创建:

创建空的的值

importpandas as pd

s=pd.Series()print(s) #Series([], dtype: float64)

传入一个列表

data=[‘a’,’b’,’c’,’d’]

res=pd.Series(data)print(res)”’结果

0 a

1 b

2 c

3 d

这里没有传递任何索引,因此默认情况下,它分配了从0到len(data)-1的索引,即:0到3”’

传一个字典

data = {‘a’ : 0, ‘b’ : 1, ‘c’ : 2}

s=pd.Series(data)print(s)”’结果

a 0

b 1

c 2

dtype: int64

注意 – 字典键用于构建索引。”’

从标量创建索引:

如果数据是标量值,则必须提供索引。将按照索引重复该值进行匹配

res=pd.Series(0, index=[‘a’,’b’,’c’,’d’])print(res)”’结果

a 0

b 0

c 0

d 0”’

自指定索引值:

res=pd.Series([‘a’,’b’,’c’,’d’],index=[‘a_index’,’b_index’,’c_index’,’d_index’])print(res)”’结果

a_index a

b_index b

c_index c

d_index d”’

从具有位置的系列中访问数据(取值):

重点理解:数组是从零开始计数的,第一个位置存储再零位置)

查看index 、 values的值:

#查看数组的index值

print(res.index)#查看数组的value值

print(res.values)#取值(根据默认第零位开始取)

print(res[0]) #a

取前三个值(不包括定义的最后一个数值)

res=pd.Series([‘a’,’b’,’c’,’d’],index=[‘a_index’,’b_index’,’c_index’,’d_index’])#取前三个值(不包括3)

print(res[:3]) #是个对象可以 res[:3].values

”’结果

a_index a

b_index b

c_index c

dtype: object

”’

取后三个值:

print(res[-3:])”’结果

b_index b

c_index c

d_index d

dtype: object”’

使用索引标签检索数据并设置数据:

修改value值

res=pd.Series([‘a’,’b’,’c’,’d’],index=[‘a_index’,’b_index’,’c_index’,’d_index’])print(res)

res[‘a_index’]=’new_a’

print(res)”’结果

a_index new_a

b_index b

c_index c

d_index d”’

copy复制数据并修改

sr1=pd.Series([12,13,14],index=[‘c’,’a’,’d’])

sr2=pd.Series([14,15,16],index=[‘d’,’c’,’a’])#可以使用copy赋值数组再修改

sr3=sr1[1:].copy()print(sr3)

sr3[0]=1888

print(sr3)”’a 13

d 14

dtype: int64

a 1888

d 14

dtype: int64”’

运算:

初始构建2个数组

sr1=pd.Series([12,13,14],index=[‘c’,’a’,’d’])

sr2=pd.Series([14,15,16],index=[‘d’,’c’,’a’])print(sr1+sr2)”’结果

a 29

c 27

d 28”’

求和运算

Pandas自动对齐功能,如果自定义了索引就会找原来索引,如果没有值就为NaN

sr1=pd.Series([12,13,14],index=[‘c’,’a’,’d’])

sr3=pd.Series([11,20,10,14], index=[‘d’,’c’,’a’,’b’])print(sr3)#求sr1+sr3和值

print(sr1+sr3)”’结果

a 23.0

b NaN #一位sr1中没有索引b,所以显示空

c 32.0

d 25.0

Pandas自动对齐功能,如果自定义了索引就会找原来索引,如果没有值就为NaN”’

针对Seires格式的数据,Pandas对其NaN值的处理如下:

#先构建一个缺失数据

sr1=pd.Series([12,13,14],index=[‘c’,’a’,’d’])

sr2=pd.Series([14,15,16],index=[‘d’,’c’,’a’])

sr3=pd.Series([11,20,10,14], index=[‘d’,’c’,’a’,’b’])#合并生成一个缺失数据

sr4=sr1+sr3print(sr4)”’结果

a 23.0

b NaN

c 32.0

d 25.0

dtype: float64”’

第一步:格式为pd.isnull(Series对象),isnull、notnull用于过滤、查找NaN的值

isnull,返回布尔数组,缺失值对应True

#isnull,返回布尔数组,缺失值对应True

res=pd.isnull(sr4)print(res)”’结果

a False

b True

c False

d False”’

notnull,返回布尔数组,缺失值对应为False

#notnull,返回布尔数组,缺失值对应为False

res=pd.notnull(sr4)print(res)”’结果

a True

b False

c True

d True

dtype: bool”’

第二步:格式为 pd.Series.dropna(series对象),删除有NaN的行,注意对于Series的数据格式使用dropna必须是

pd.Series.dropna(sr4)这个格式,不能使用pd.dropna()这个是无效的,

dropna,删除NaN的行(因为是Series数据格式只有行的概念)

#dropna,过滤掉有NaN的行

res=pd.Series.dropna(sr4)print(res)”’a 23.0

c 32.0

d 25.0

dtype: float64”’

第三步:格式为 Series对象.fillna(‘要填充为的数据内容’)

fillna,填充缺失的数据

#fillna,填充NaN缺失的数据

res=sr4.fillna(‘这是给NaN做填充的数据’)print(res)”’数据结构

a 23

b 这是给NaN做填充的数据

c 32

d 25

dtype: object”’

DataFrame数组创建

DataFrame是个二维数据结构,非常接近电子表格或者类似于mysql数据库的形式,是一个表格型的数据结构,含有一组有序的列。

DataFrame可以被看做是由Series组成的字典,并且共用一个索引。

创建数组

简单方式

data={‘name’:[‘google’,’baidu’,’yahho’],’marks’:[100,200,300],’price’:[1,2,3]}

res=DataFrame(data)print(res)”’结果(默认索引是0开始)

name marks price

0 google 100 1

1 baidu 200 2

2 yahho 300 3”’

补充,与Series结合方式

#与Series结合的方式

res=pd.DataFrame({‘one’:pd.Series([1,2,3],index=[‘a’,’b’,’c’]), ‘two’:pd.Series([1,2,3,4],index=[‘b’,’a’,’c’,’d’])})print(res)”’结果

one two

a 1.0 2

b 2.0 1

c 3.0 3

d NaN 4”’

数组属性、方法

1)index 获取索引

2)T转置

3)columns获取列索引

4)values获取值数组

5)  describe()获取快速统计

6)sort_index(axis, …, ascending)按行或列索引排序

7)sort_values(by, axis, ascending)按值排序

data = {“name”: [‘google’, ‘baidu’, ‘yahoo’], “marks”: [100, 200, 300], “price”: [1, 2, 3]}

res=DataFrame(data)print(res)”’依此来进行下面查询方法的验证

name marks price

0 google 100 1

1 baidu 200 2

2 yahoo 300 3”’

index获取索引

#index,查看索引

print(res.index) #RangeIndex(start=0, stop=3, step=1)

columns查看列索引

#columns,查看列索引

print(res.columns) #Index([‘name’, ‘marks’, ‘price’], dtype=’object’)

values获取数组值

#values,查看值数组

print(res.values)”’结果

[[‘google’ 100 1]

[‘baidu’ 200 2]

[‘yahoo’ 300 3]]”’

describe(),获取快速统计

#describe(),获取快速统计#print(res.describe())

”’marks price

count 3.0 3.0

mean 200.0 2.0

std 100.0 1.0

min 100.0 1.0

25% 150.0 1.5

50% 200.0 2.0

75% 250.0 2.5

max 300.0 3.0”’

sort_index(),按行或列索引排序

参数说明,axis=0/1ascending=True升序/降序默认是True

#axis=0,按照行索引排序

res=res.sort_index(axis=0)print(res)”’索引排序结果

name marks price

0 google 100 1

1 baidu 200 2

2 yahoo 300 3”’

#axis=1,按照列索引排序

res=res.sort_index(axis=1,ascending=True)print(res)”’列索引排序结果

marks name price

0 100 google 1

1 200 baidu 2

2 300 yahoo 3”’

sort_values( by,axis,ascending ) 按值排序

#sort_values(by,axis,ascending) 按值排序

data = {“name”: [‘google’, ‘baidu’, ‘yahoo’], “marks”: [100, 200, 300], “price”: [1, 2, 3]}

res=DataFrame(data)

res=res.sort_values(by=[‘name’],axis=0) #这里的axis只能是0,每一列的数值就是根据每个数值的大小顺序上下浮动排序的,参照的就是逐行去对比print(res)”’按照值排序结果

name marks price

1 baidu 200 2

0 google 100 1

2 yahoo 300 3”’

手动指定索引值

#手动指定索引值

res=DataFrame(data,columns=[‘name’,’marks’,’price’,],index=[‘第一’,’第二’,’第三’])print(res)”’结果

name marks price

第一 google 100 1

第二 baidu 200 2

第三 yahho 300 3”’

取值(有行索引和列索引)

获取单列数据,例如获取name标签列数据

#获取单列#1.获取名字标签列

res=DataFrame(data,columns=[‘name’,’marks’,’price’,],index=[‘第一’,’第二’,’第三’])

res=res[‘name’]print(res)”’结果

第一 google

第二 baidu

第三 yahho

Name: name, dtype: object”’

获取price标签列数据

#2.获取价格标签列#res=res[‘price’]#print(res)

”’第一 1

第二 2

第三 3

Name: price, dtype: int64”’

获取双列数据

同时获取2个标签(注意:同时获取两个标签时要双中括号引起来)

#同时获取2个标签(注意:同时获取两个标签时要双中括号引起来)

res=res[[‘name’,’price’]]print(res)”’结果

name price

第一 google 1

第二 baidu 2

第三 yahho 3”’

获取数据中单个值

#先从单列里面取第一列,再从取出的列中取出第一个值

res=res[‘name’][0]print(res) #google

取前两行值

#先取前2行

res=res[0:2]print(res)”’name marks price

第一 google 100 1

第二 baidu 200 2”’

取前两行值后再从中取指定列

#先取前2行–再从中取指定列

res=res[0:2][[‘name’,’price’]]print(res)”’结果:注意,取多个标签时要双括号

name price

第一 google 1

第二 baidu 2”’

ix ,可以兼容下面loc、iloc用法,它可以根据行列标签又可以根据行列数,例如下面的(参数前:行索引 后:列索引)

importpandas as pd

data= pd.DataFrame({‘A’:[1,2,3],’B’:[4,5,6],’C’:[7,8,9]},index=[“a”,”b”,”c”])

data

A B C

a1 4 7b2 5 8c3 6 9:本文为博主原创文章,转载请附上博文链接!

比如要拿到5

方法1

data.ix[1,1]

data.ix[‘b’:’c’,’B’:’C’]

方法2

data.ix[1:3,1:3]

data.ix[‘b’:’c’,’B’:’C’]

loc,通过标签获取列

指定取某几个标签

#指定取某几个标签

res=DataFrame(data,columns=[‘name’,’marks’,’price’,],index=[‘第一’,’第二’,’第三’])

res=res.loc[:,[‘name’,’marks’]]print(res)”’name marks

第一 google 100

第二 baidu 200

第三 yahho 300”’

取指定范围内的标签

#取指定范围内的标签

res=res.loc[:,’name’:’price’]print(res)”’name marks price

第一 google 100 1

第二 baidu 200 2

第三 yahho 300 3”’

索引+标签取值

#索引+标签取值

data = {“name”: [‘google’, ‘baidu’, ‘yahoo’], “marks”: [100, 200, 300], “price”: [1, 2, 3]}

res=DataFrame(data)print(res)”’初始结果

name marks price

0 google 100 1

1 baidu 200 2

2 yahoo 300 3”’

#搭配取值写法

res=res.loc[0,[‘name’]]print(res)”’结果

name google

Name: 0, dtype: object”’

根据索引、标签范围配合取值(注意,0:1包含了1)

#根据索引、标签范围配合取值(注意,0:1包含了1)

res=res.loc[0:1,[‘marks’,’price’]]print(res)”’结果

marks price

0 100 1

1 200 2”’

iloc,通过位置获取行数据

获取单行数据

data = {“name”: [‘google’, ‘baidu’, ‘yahoo’], “marks”: [100, 200, 300], “price”: [1, 2, 3]}

res=DataFrame(data)print(res)”’初始状态

name marks price

0 google 100 1

1 baidu 200 2

2 yahoo 300 3”’

#获第一行数据

res=res.iloc[0]print(res)”’结果

name google

marks 100

price 1

Name: 0, dtype: object”’

获取多行数据

#获取多行数据

data = {“name”: [‘google’, ‘baidu’, ‘yahoo’], “marks”: [100, 200, 300], “price”: [1, 2, 3]}

res=DataFrame(data)print(res.iloc[1]) #先取到第2行: 1 baidu 200 2

res=res.iloc[1,2] #res.iloc[1,2]再在得到的行上再根据索引取值

print(res) #200

获取行和列(根据范围取值,注意前提还用默认索引)

#取行和列(根据范围来取)

res=res.iloc[0:2,0:2]print(res)”’结果

name marks 1.先取前2行【0:2】即取0,1索引行

0 google 100 2.在1的基础上再取前2列【0,2】即取列索引为0,1

1 baidu 200”’

取2、3行,然后打印这两行所有列的数据

res=res.iloc[1:3,:]print(res)”’结果

name marks price

1 baidu 200 2

2 yahoo 300 3”’

取1、2行,然后单一显示它的第1、3列

#取第1、2行,然后打印显示它的第1、3列

res=res.iloc[[0,1],[0,2]]print(res)”’结果

name price

0 google 1

1 baidu 2”’



版权声明:本文为weixin_39543758原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。