分享

Python Pandas 中的数据结构(超详细,你确定不学习一下?)

 禁忌石 2022-05-07 发布于浙江省

Pandas有三种数据结构:Series、DataFrame和Panel。Series类似于数组;DataFrame类似于表格;Panel可视为Excel的多表单Sheet

文章图片1

1.Series

Series是一种一维数组对象,包含一个值序列,并且包含数据标签,称为索引(index),通过索引来访问数组中的数据。

1.1通过列表创建Series

例1.通过列表创建

import pandas as pdobj = pd.Series([1,-2,3,4]) #仅由一个数组构成print(obj)
out:0 11 -22 33 4dtype: int64

输出的第一列为index,第二列为数据value。如果创建Series时没有指定index,Pandas会采用整型数据作为该Series的index。也可以使用Python里的索引index和切片slice技术

例2.创建Series时指定索引

import pandas as pdi = ['a','c','d','a']v = [2,4,5,7]t = pd.Series(v,index=i,name='col')print(t)
out:a 2c 4d 5a 7Name: col, dtype: int64

尽管创建Series指定了index,实际上Pandas还是有隐藏的index位置信息。所以Series有两套描述某条数据手段:位置和标签

例3.Series位置和标签的使用

import pandas as pdval = [2,4,5,6]idx1 = range(10,14)idx2 = 'hello the cruel world'.split()s0 = pd.Series(val)s1 = pd.Series(val,index=idx1)t = pd.Series(val,index=idx2)print(s0.index)print(s1.index)print(t.index)print(s0[0])print(s1[10])print('default:',t[0],'label:',t['hello'])

1.2通过字典创建Series

如果数据被存放在一个Python字典中,也可以直接通过这个字典来创建Series

例4.通过字典创建Series

import pandas as pdsdata = {'Ohio':35000,'Texass':71000,'Oregon':16000,'Utah':5000}obj = pd.Series(sdata)print(obj)
Ohio 35000Texass 71000Oregon 16000Utah 5000dtype: int64

如果只传入一个字典,则结果Series中的索引就是原字典的键(有序排列)

例5.通过字典创建Series时的索引

import pandas as pdsdata = {'a':100,'b':200,'e':300}obj = pd.Series(sdata)print(obj)
a 100b 200e 300dtype: int64

如果字典中的键值和指定的索引不匹配,则对应的值时NaN

例6.键值和指定索引不匹配

import pandas as pdsdata = {'a':100,'b':200,'e':300}letter = ['a','b','c','e']obj = pd.Series(sdata,index=letter)print(obj)
a 100.0b 200.0c NaNe 300.0dtype: float64

对于许多应用而言,Series重要的一个功能是:它在算术运算中会自动对齐不同索引的数据

例7.不同索引数据的自动对齐

import pandas as pdsdata = {'Ohio':35000,'Texas':71000,'Oregon':16000,'Utah':5000}obj1 = pd.Series(sdata)states = ['California','Ohio','Oregon','Texas']obj2 = pd.Series(sdata,index=states)print(obj1+obj2)
California NaNOhio 70000.0Oregon 32000.0Texas 142000.0Utah NaNdtype: float64

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

例8.Series索引的修改

import pandas as pdobj = pd.Series([4,7,-3,2])obj.index = ['Bob','Steve','Jeff','Ryan']print(obj)
Bob 4Steve 7Jeff -3Ryan 2dtype: int64

2.DataFrame

DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同类型的值(数值、字符串、布尔值等)。DataFrame既有行索引也有列索引,它可以被看作由Series组成的字典(共用同一个索引)。跟其他类型的数据结构相比,DataFrame中面向行和面向列的操作上基本上是平衡的

构建DataFrame的方式有很多,最常用的是直接传入一个由等长列表或NumPy数组组成的字典来形成DataFrame

例9.DataFrame的创建

import pandas as pddata = {'name':['张三','李四','王五','小明'],'sex':['female','female','male','male'],'year':[2001,2001,2003,2002],'city':['北京','上海','广州','北京']}df = pd.DataFrame(data)print(df)
name sex year city0 张三 female 2001 北京1 李四 female 2001 上海2 王五 male 2003 广州3 小明 male 2002 北京

DataFrame会自动加上索引(跟Series一样),且全部列会被有序排列。如果指定了列名序列,则DataFrame的列就会按照指定顺序进行排列

例10.DataFrame的索引

import pandas as pddata = {'name':['张三','李四','王五','小明'],'sex':['female','female','male','male'],'year':[2001,2001,2003,2002],'city':['北京','上海','广州','北京']}df = pd.DataFrame(data,columns = ['name','year','sex','city'])print(df)
name year sex city0 张三 2001 female 北京1 李四 2001 female 上海2 王五 2003 male 广州3 小明 2002 male 北京

跟Series一样,如果传入的列在数据中找不到,就会产生NaN值。


例11.DataFrame创建时的空缺值

import pandas as pddata = {    'name':['张三','李四','王五','小明'],    'sex':['female','female','male','male'],    'year':[2001,2001,2003,2002],    'city':['北京','上海','广州','北京']}df = pd.DataFrame(data,columns = ['name','year','sex','city','address'])print(df)
name year sex city address0 张三 2001 female 北京 NaN1 李四 2001 female 上海 NaN2 王五 2003 male 广州 NaN3 小明 2002 male 北京 NaN

DataFrame构造函数的columns函数给出列的名字,index给出label标签

例12.DataFrame构建时指定列名

import pandas as pddata = {'name':['张三','李四','王五','小明'],'sex':['female','female','male','male'],'year':[2001,2001,2003,2002],'city':['北京','上海','广州','北京']}df = pd.DataFrame(data,columns = ['name','year','sex','city','address'],index = ['a','b','c','d'])print(df)
name year sex city addressa 张三 2001 female 北京 NaNb 李四 2001 female 上海 NaNc 王五 2003 male 广州 NaNd 小明 2002 male 北京 NaN

3.索引对象

Pandas的索引对象负责管理轴标签和其他元数据(例如轴名称等).构建Series或DataFrame时,所用到的任何数组或其他序列的标签都会被转换成一个Index

例13.显示DataFrame的索引和列

import pandas as pddata = {'name':['张三','李四','王五','小明'],'sex':['female','female','male','male'],'year':[2001,2001,2003,2002],'city':['北京','上海','广州','北京']}df = pd.DataFrame(data,columns = ['name','year','sex','city','address'],index = ['a','b','c','d'])print(df)print(df.index)print(df.columns)
name year sex city addressa 张三 2001 female 北京 NaNb 李四 2001 female 上海 NaNc 王五 2003 male 广州 NaNd 小明 2002 male 北京 NaNIndex(['a', 'b', 'c', 'd'], dtype='object')Index(['name', 'year', 'sex', 'city', 'address'], dtype='object')

索引对象不能进行修改,否则会报错。不可修改性非常重要,因为这样才能使Index对象在多个数据结构之间安全共享
除了长的像数组,Index的功能也类似于一个固定大小的集合
例14.DataFrame的Index

import pandas as pddata = {'name':['张三','李四','王五','小明'],'sex':['female','female','male','male'],'year':[2001,2001,2003,2002],'city':['北京','上海','广州','北京']}df = pd.DataFrame(data,columns = ['name','year','sex','city','address'],index = ['a','b','c','d'])print('name'in df.columns)print('a'in df.index)
TrueTrue

每个索引都有一些方法和属性,他们可用于设置逻辑并回答有关该索引所包含的数据的常见的问题。

文章图片3

例15.插入索引值

import pandas as pddata = {'name':['张三','李四','王五','小明'],'sex':['female','female','male','male'],'year':[2001,2001,2003,2002],'city':['北京','上海','广州','北京']}df = pd.DataFrame(data,columns = ['name','year','sex','city','address'],index = ['a','b','c','d'])df.index.insert(1,'w')
Index(['a', 'w', 'b', 'c', 'd'], dtype='object')

4.查看DataFrame的常用属性

DataFrame的基础属性有value、index、columns、dtypes、ndim和shape,分别可以获取DataFrame的元素、索引、列名、类型、维度和形状。

例16.显示DataFrame的属性

import pandas as pddata = {'name':['张三','李四','王五','小明'],'sex':['female','female','male','male'],'year':[2001,2001,2003,2002],'city':['北京','上海','广州','北京']}df = pd.DataFrame(data,columns = ['name','year','sex','city','address'],index = ['a','b','c','d'])print(df)print('信息表的所有值为:\n',df.values)print('信息表的所有列为:\n',df.columns)print('信息表的元素个数:\n',df.size)print('信息表的维度:\n',df.ndim)print('信息表的形状:\n',df.shape)
name year sex city addressa 张三 2001 female 北京 NaNb 李四 2001 female 上海 NaNc 王五 2003 male 广州 NaNd 小明 2002 male 北京 NaN信息表的所有值为:[['张三' 2001 'female' '北京' nan]['李四' 2001 'female' '上海' nan]['王五' 2003 'male' '广州' nan]['小明' 2002 'male' '北京' nan]]信息表的所有列为:Index(['name', 'year', 'sex', 'city', 'address'], dtype='object')信息表的元素个数:20信息表的维度:2信息表的形状:(4, 5)
文章图片4

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多