pandas是什么以及pandas的三种数据结构Series、DataFrame、MultiIndex的创建方式函数代码

一、pandas概述

pandas是2008年WesMcKinney开发出的专门用于数据挖掘的开源python库,以Numpy为基础,借助numpy模块在计算方面性能高的优势,基于matplotlib,能够简便的画图,具有独特的数据结构

pandas特点

  • 图表的可读性强
  • 数据处理能力便捷
  • 读取文件方便
  • 封装了Matplotlib、Numpy的画图和计算

二、pandas数据结构

pandas中共有三种数据结构,分别为

  • Series:是一维数据结构
  • DataFrame:是二维的表格型数据结构
  • MultiIndex:是三维的数据结构

2.1 Series

Series是一个类似于一维数组的数据结构,能够保存任何类型的数据,如整数、字符串、浮点数等,主要由一组数据和与之相关的索引两部分构成

1.series创建

  • series创建:pd.Series(data=None, index=None,dtype=None):创建带索引的一维数组
    • data:传入的数据,可以是ndarray、list等
    • index:索引,必须是唯一的,且与数据的长度相等。如果没有传入索引参数,则默认会自动创建一个从0-N的整数索引
    • dtype:数据的类型
  • 创建
  1. 指定数据内容,默认索引
  2. 给定数据内容,指定索引
  3. 通过字典数据创建
import pandas as pd
import numpy as np
pd.Series(np.arange(0, 50, 10))  # 创建[0,50)步长为10的等差数组数据,索引默认

pd.Series([1, 2, 3, 4.3, 5.2], index=[1,2,3,4,5])   # 指定数据和索引

name = pd.Series({'name1':'XX', 'name2':'XY', 'name3':'YY', 'name4':'YX'})   # 通过字典数据创建
name

2.series属性 

  •  Series属性:为了方便操作Series对象中的索引和数据,Series中提供了两个属性
    • index
    • values
name = pd.Series({'name1':'XX', 'name2':'XY', 'name3':'YY', 'name4':'YX'})   # 通过字典数据创建
name.index    # 获取索引

name.values    # 获取数据值

data = pd.Series([1, 2, 3, 4.3, 5.2], index=[1,2,3,4,5])   # 指定数据和索引
data.index

data.values

2.2 DataFrame

DataFrame是一个类似于二维数组或表格(如excel)的对象,既有行索引,又有列索引

1. DataFrame创建 

  • 行索引:表明不同行,横向索引,叫index,0轴,axis=0
  • 列索引:表名不同列,纵向索引,叫columns,1轴,axis=1
  • DataFrame创建:pd.DataFrame(data=None, index=None, columns=None)
    • data:传入的数据
    • index:行标签。如果没有传入索引参数,则默认会自动创建一个从0-N的整数索引。
    • columns:列标签。如果没有传入索引参数,则默认会自动创建一个从0-N的整数索引
pd.DataFrame(np.random.randn(3, 5))  # 3行5列

num = np.random.randint(50, 100, (3, 5))
num

# 传入标签索引
column = ['第一列', '第二列', '第三列', '第四列', '第五列']   # 列标签索引
# ind = ['第一行', '第二行', '第三行']    # 行标签索引
ind = ['第' + str(i) + '行' for i in range(num.shape[0])]   # 行标签索引,num.shape[0]即获取num数组的行号,此处为3
data = pd.DataFrame(num, columns=column, index=ind)
data

 2. DataFrame属性方法

  • shape:获取数组形状,几行几列
  • index:获取行索引列表
  • columns:获取列索引列表
  • values:获取数组中的值
  • T:数组转置
  • head(n):显示前n行数据,若不补充参数,则默认5行
  • tail(n):显示后n行数据,若不补充参数,则默认5行
data
data.shape
data.index
data.columns
data.values
data.T
data.head(2)
data.tail(1)

3. DatatFrame索引的设置

①修改行列索引,必须全部修改,不能修改单个索引

# 修改索引,必须全部修改
ind = ['第_' + str(i) + '_行' for i in range(num.shape[0])]   # 行标签索引,num.shape[0]即获取num数组的行号,此处为3
data.index = ind
data

data.index[1] = '第二行'
data  # 报错:索引不支持可变操作,即不能单个修改

②重设索引

  • reset_index(drop=False):设置新的下标索引
    • drop:默认为False,不删除原来索引,若为True,删除原来的索引值
data.reset_index()   # 重置索引,默认drop=False,不删除原来索引

data.reset_index(drop=True)    # 重置索引,drop=True,删除原来索引

③以某列值设置为新的索引

  • set_index(keys, drop=True)
    • keys : 列索引名成或者列索引名称的列表
    • drop : 布尔类型,默认为True,当做新的索引,删除原来的列
time = pd.DataFrame({'day': [365, 365*2, 365*3], 'month':[12*(i + 1) for i in range(3)], 'year': [1, 2, 3]})
time

time.set_index('year', drop=False)    # 设置year为索引,drop=False表示不删除原来year那一列

time.set_index(['year', 'month'])  # 设置多个索引

2.3 MultiIndex

MultiIndex是三维的数据结构,多级索引(层次化索引),是pandas的重要功能,可以在Series、DataFrame对象上拥有2个以及2个以上的索引

1. multiIndex特性 

查看索引如下,多级或分层索引对象

  • index属性
    • names:levels的名称
    • levels:每个level的元组值
time0 = time.set_index('year', drop=False)    # 设置year为索引,drop=False表示不删除原来year那一列
time0.index   # 获取year索引

time = time.set_index(['year', 'month'])  # 设置多个索引
time.index   # 获取year和month索引

time.index.names   # index的names属性

time.index.levels   # index的levels属性

2. multiIndex和panel创建

①MultiIndex创建

  • pd.MultiIndex.from_arrays(arrays, sortorder=None, names=None):用于将数组arrays转为多索引multiIndex,多维数组作为参数,高维指定高层索引,低维指定低层索引
    • arrays:列表或序列类型,每个array-like都会为每个数据点提供一个级别的值, len(arrays)是级别数
    • sortorder:整数或无,排序级别(必须按该级别按字典顺序排序)
    • names:str的列表/序列,可选,用来指定索引中级别的名称
    • 返回:多索引MultiIndex

 对比前面设置的多个索引如下

data = [['XY', 'YX', 'XX', 'YY'], [20, 18, 22, 19]]    # 两层索引
pd.MultiIndex.from_arrays(data, names=('姓名', '年龄'))   # names指定索引名

其他补充

  • pd.MultiIndex.from_tuples():元组的列表作为参数,每个元组指定每个索引(高维和低维索引)
  • pd.MultiIndex.from_product():一个可迭代对象的列表作为参数,根据多个可迭代对象元素的笛卡尔积(元素间的两两组合)进行创建索引
  • pd.MultiIndex.from_frame:根据现有的数据框来直接生成
  • groupby():通过数据分组统计得到
  • pivot_table():生成透视表的方式来得到

 ②panel创建(已弃用)

  • pd.Panel(data=Noneitems=Nonemajor_axis=Noneminor_axis=None):用来存储3维数组的Panel结构
    • data : ndarray或者dataframe
    • minor_axis : 索引或类似数组的对象,axis=2
    • major_axis : 索引或类似数组的对象,axis=1
    • items : 索引或类似数组的对象,axis=0

学习导航:http://xqnav.top/ 

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

learning-striving

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值