【数据分析 - 基础入门之pandas篇③】- pandas数据结构——DataFrame

这篇具有很好参考价值的文章主要介绍了【数据分析 - 基础入门之pandas篇③】- pandas数据结构——DataFrame。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

大家好!我是一朵向阳花(花花花)🍭,本期跟大家分享的知识是 pandas 数据结构——DataFrame。

作者的【 Python 数据分析】专栏正在火热更新中🔥,如果本文对您有帮助,欢迎大家点赞 + 评论 + 收藏 !

每日金句分享:慢慢来,谁还没有一个努力的过程。』—— pony「网易云音乐」

一、DataFrame创建

DataFrame 是一个表格型的数据结构,DataFrame 既有行索引,又有列索引。

  • index行索引
  • column列索引
  • values二维 NumPy 数组

1.1 字典创建

字典创建时,字典的键变成 column ,值一般要是一个可迭代对象。

d = {
    'name':['John','marry','kitty','smith'],
    'age':[21,32,43,31]
}
df = pd.DataFrame(d)
df

【数据分析 - 基础入门之pandas篇③】- pandas数据结构——DataFrame,Python数据分析,数据分析,pandas,数据结构

1.2 NumPy二维数组创建

NumPy 二维数组创建时,只需要将二维数组赋值给 DataFrame 的 values,然后指定 index 行索引和 column 列索引即可。

df = pd.DataFrame(
    data=np.random.randint(10,100,size=(4,6)),
    index=['小明','小红','小黄','小绿'],
    columns=['语文','数学','英语','化学','物理','生物']
)
df

【数据分析 - 基础入门之pandas篇③】- pandas数据结构——DataFrame,Python数据分析,数据分析,pandas,数据结构

二、DataFrame切片

对于 DataFrame 的切片操作,因为是表格型,因此可以分为行切片,列切片,行列切片。

df = pd.DataFrame(
    data=np.random.randint(10,100,size=(4,6)),
    index=['小明','小红','小黄','小绿'],
    columns=['语文','数学','英语','化学','物理','生物']
)
print(df)

【数据分析 - 基础入门之pandas篇③】- pandas数据结构——DataFrame,Python数据分析,数据分析,pandas,数据结构

2.1 行切片

既然是切片,也是分为显式切片和隐式切片,下面分别演示。

显式切片:

df['小红':'小黄'] 
df.loc['小红':'小黄']

【数据分析 - 基础入门之pandas篇③】- pandas数据结构——DataFrame,Python数据分析,数据分析,pandas,数据结构

隐式切片:

df[1:3] # 数字是左闭右开
df.iloc[1:3]

【数据分析 - 基础入门之pandas篇③】- pandas数据结构——DataFrame,Python数据分析,数据分析,pandas,数据结构

2.2 列切片

对于列切片,即不管第一个维度(使用:,实现),需要特别注意的是,对列切片不能使用中括号 [] ,只能使用 lociloc

  • 显式切片
df.loc[:,'语文':'英语']

【数据分析 - 基础入门之pandas篇③】- pandas数据结构——DataFrame,Python数据分析,数据分析,pandas,数据结构
使用中括号报错:

【数据分析 - 基础入门之pandas篇③】- pandas数据结构——DataFrame,Python数据分析,数据分析,pandas,数据结构

  • 隐式切片
df.iloc[:,0:3]

【数据分析 - 基础入门之pandas篇③】- pandas数据结构——DataFrame,Python数据分析,数据分析,pandas,数据结构
使用中括号报错:

【数据分析 - 基础入门之pandas篇③】- pandas数据结构——DataFrame,Python数据分析,数据分析,pandas,数据结构

2.3 行列切片

行列切片同时涉及对行和对列的切片,因此,对行列切片也只有两种方式,loc & iloc

df.loc['小明':'小红','语文':'数学']

【数据分析 - 基础入门之pandas篇③】- pandas数据结构——DataFrame,Python数据分析,数据分析,pandas,数据结构

df.iloc[0:2,0:2]

【数据分析 - 基础入门之pandas篇③】- pandas数据结构——DataFrame,Python数据分析,数据分析,pandas,数据结构

三、DataFrame运算

3.1 DataFrame和标量的运算

DataFrame和标量之间的运算(±*/ // % **),正常对每个元素运算即可。

df1 = pd.DataFrame(
    data=np.random.randint(0,10,(2,3))
)
display(df1)
df1 + 10

【数据分析 - 基础入门之pandas篇③】- pandas数据结构——DataFrame,Python数据分析,数据分析,pandas,数据结构

3.2 DataFrame之间的运算

DataFrame的运算需要注意:

  • 1.DataFrame没有广播机制,因此它不会为缺失的行列补充数据
  • 2.如果索引对应,那么正常运算
  • 3.如果索引不对应,那么是 NaN
  • 4.如果想给没有索引的地方填充数据,使用 add 函数
df1 = pd.DataFrame(
    data=np.random.randint(0,10,(2,3))
)
df2 = pd.DataFrame(
    data=np.random.randint(0,10,(3,2))
)
display(df1,df2)
df1 + df2

【数据分析 - 基础入门之pandas篇③】- pandas数据结构——DataFrame,Python数据分析,数据分析,pandas,数据结构
使用 add 函数填充数据:

df1.add(df2,fill_value=0)

【数据分析 - 基础入门之pandas篇③】- pandas数据结构——DataFrame,Python数据分析,数据分析,pandas,数据结构

3.3 Series和DataFrame之间的运算

Series 的行索引会自动匹配 DataFrame 的列索引,匹配成功后,会对 DataFrame 的每一行都做相同的运算。

s = pd.Series([100,10,1],index=df1.columns)
df = pd.DataFrame(data=np.random.randint(2,10,(3,3)))
display(s,df)
df + s

【数据分析 - 基础入门之pandas篇③】- pandas数据结构——DataFrame,Python数据分析,数据分析,pandas,数据结构

四、DataFrame多层次索引

4.1 多层次索引构造

多层次索引创建包括隐式构造和显式构造,隐式构造是直接指定一个多维 index 和多维 column 的构造方式,显式构造是通过 MultiIndex 类来构造的,有三种方式,分别是 数组、元组、笛卡尔积

1.隐式构造
data = np.random.randint(0,100,size=(6,6))

index = pd.MultiIndex.from_arrays([
    ['一班','一班','一班','二班','二班','二班'],
    ['张三','李四','王五','赵六','孙七','王八']
])

columns = [
    ['期中','期中','期中','期末','期末','期末'],
    ['语文','数学','英语','语文','数学','英语']
]

df = pd.DataFrame(data=data,index=index,columns=columns)
df

【数据分析 - 基础入门之pandas篇③】- pandas数据结构——DataFrame,Python数据分析,数据分析,pandas,数据结构

2.显式构造

显式构造在隐式构造的基础上,只改变 index ,不改变其他。

  • <1> 数组
index = pd.MultiIndex.from_arrays([
    ['一班','一班','一班','二班','二班','二班'],
    ['张三','李四','王五','赵六','孙七','王八']
])
  • <2> 元组
index = pd.MultiIndex.from_tuples(
    (
        ('一班','张三'),('一班','李四'),('一班','王五'),
        ('二班','赵六'),('二班','孙七'),('二班','王八')
    )
)
  • <3> 笛卡尔积

笛卡尔积构造出来的是 2 x 3 = 6 个 index

index = pd.MultiIndex.from_product([
    ['一班','二班'],
    ['张三','李四','王五']
])

三种构造方法的运行结果和显式构造相同。

4.2 DataFrame多层索引的索引

1.获取元素

多层次索引中,如果使用 中括号 ,那么是列列行行;如果使用 loc ,那么是行列列行,如果使用 iloc ,那么是行列

还是使用上面构造的期中、期末成绩表格演示。

# 显式索引
print(df['期中']['语文']['一班']['张三'])
print(df.loc['一班']['期中']['语文']['张三'])
# 隐式索引
print(df.iloc[1])

【数据分析 - 基础入门之pandas篇③】- pandas数据结构——DataFrame,Python数据分析,数据分析,pandas,数据结构

2.列索引&行索引

只需要牢牢记住中括号 []lociloc 在多层索引中的使用规则即可。

df['期中']
df.loc['一班']['期中']
df.iloc[:,[1]]

4.3 DataFrame多层索引的切片操作

DataFrame 多层次索引切片较为复杂,可以参考这篇博客 【数据分析day03】pandas“层次化索引对象”的多层索引,切片,stack。

五、索引的堆叠

索引的堆叠是指将行变成列,或将列变成行的操作,列变行由 stack 函数实现,行变列由 unstack 函数实现。

stack:将列索引变成行索引,默认是将最里层的列索引变成行索引,可以通过level控制,level默认等于 -1 并且变成的行索引也是在最里层。

首先构造 dataframe 对象:

data = np.random.randint(0,100,size=(6,6))

index = pd.MultiIndex.from_arrays([
    ['一班','一班','一班','二班','二班','二班'],
    ['张三','李四','王五','赵六','孙七','王八']
])

columns = [
    ['期中','期中','期中','期末','期末','期末'],
    ['语文','数学','英语','语文','数学','英语']
]

df = pd.DataFrame(data=data,index=index,columns=columns)
df

【数据分析 - 基础入门之pandas篇③】- pandas数据结构——DataFrame,Python数据分析,数据分析,pandas,数据结构
然后使用 stack 函数将列索引变成行索引:

df.stack()

【数据分析 - 基础入门之pandas篇③】- pandas数据结构——DataFrame,Python数据分析,数据分析,pandas,数据结构
和下列写法等价:

df.stack(level=-1)

将最外层列索引变成行索引:

df.stack(level=0)

【数据分析 - 基础入门之pandas篇③】- pandas数据结构——DataFrame,Python数据分析,数据分析,pandas,数据结构

unstack:将行索引变成列索引(反堆叠),并且变成的列索引在最里层

还是使用上面的 dataframe 对象,进行反堆叠:

df.unstack()

【数据分析 - 基础入门之pandas篇③】- pandas数据结构——DataFrame,Python数据分析,数据分析,pandas,数据结构

level 属性:level默认等于 -1 ,最外层是0,最往里数值越大,-1就是指最里层

fill_value 属性:是stack、unstack方法的属性,用于填充NaN值。

不填充空值时:

df.unstack(level=0)

【数据分析 - 基础入门之pandas篇③】- pandas数据结构——DataFrame,Python数据分析,数据分析,pandas,数据结构
添加 fill_value 属性填充:

df.unstack(level=0,fill_value=0)

【数据分析 - 基础入门之pandas篇③】- pandas数据结构——DataFrame,Python数据分析,数据分析,pandas,数据结构

六、聚合操作

dataframe 聚合操作就是指 dataframe 聚合函数,有 sum、mean、max、min 等,主要有两个属性:aixs 控制行列,level 控制层级

axis 属性:控制行列,axis = 0 表示行,axis = 1 表示列。

level 属性:控制层级,从外到里,依次增大,-1 表示最里层。

构造 dataframe 对象:

data = np.random.randint(0,100,size=(6,6))

index = pd.MultiIndex.from_arrays([
    ['一班','一班','一班','二班','二班','二班'],
    ['张三','李四','王五','赵六','孙七','王八']
])

columns = [
    ['期中','期中','期中','期末','期末','期末'],
    ['语文','数学','英语','语文','数学','英语']
]

df = pd.DataFrame(data=data,index=index,columns=columns)
df

【数据分析 - 基础入门之pandas篇③】- pandas数据结构——DataFrame,Python数据分析,数据分析,pandas,数据结构
使用 sum 函数聚合:

df.sum()

【数据分析 - 基础入门之pandas篇③】- pandas数据结构——DataFrame,Python数据分析,数据分析,pandas,数据结构
和下列写法等价:

df.sum(axis=0)

保留第一层列,求行的和:

df.sum(axis=1,level=0)

【数据分析 - 基础入门之pandas篇③】- pandas数据结构——DataFrame,Python数据分析,数据分析,pandas,数据结构

结语

💕 本期跟大家分享的 “芝士” 就到此结束了,关于 DataFrame 数据结构,你学会了吗?✨

🍻 我是向阳花花花花,在学习的路上一直前行,期待与你一起进步。~ 🍻

🔥 如果文中有些地方不清楚的话,欢迎联系我,我会给大家提供思路及解答。🔥文章来源地址https://www.toymoban.com/news/detail-559712.html

相关导读

文章直达 链接
上期回顾 【数据分析 - 基础入门之pandas篇②】- pandas数据结构——Series

到了这里,关于【数据分析 - 基础入门之pandas篇③】- pandas数据结构——DataFrame的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Pandas库:从入门到应用(一)--数据结构及基础函数

    一、Pandas简介 pandas是 Python 的核⼼数据分析⽀持库,提供了快速、灵活、明确的数据结构,旨在简单、直观地处理关系型、标记型数据。pandas是Python进⾏数据分析的必备⾼级⼯具。 pandas的主要数据结构是 Series (⼀维数据)与 DataFrame (⼆维数据),这两种数据结构⾜以处理⾦融、

    2024年02月13日
    浏览(36)
  • Python中List类型数据结构广泛应用于各种场景中。然而,在数据分析和可视化过程中,经常需要将List转换为Pandas的DataFrame对象。那么如何将...

    Python中List类型数据结构广泛应用于各种场景中。然而,在数据分析和可视化过程中,经常需要将List转换为Pandas的DataFrame对象。那么如何将List转换为DataFrame对象呢?本文将介绍如何使用Python中Pandas库将List转换为DataFrame,并进一步将其转换为字符串。 将Python List转换为Pandas D

    2024年02月15日
    浏览(52)
  • 【算法与数据结构】--算法基础--算法设计与分析

    一、贪心算法 贪心算法是一种解决优化问题的算法设计方法,其核心思想是在每一步选择当前状态下的最优解,从而希望最终达到全局最优解。下面将介绍贪心算法的原理、实现步骤,并提供C#和Java的实现示例。 1.1 原理: 贪心算法的原理基于局部最优选择,通过在每一步选

    2024年02月07日
    浏览(52)
  • 【数据结构】—— 队列基础知识以及数组模拟队列的分析、演示及优化

    ❤️一名热爱Java的大一学生,希望与各位大佬共同学习进步❤️ 🧑个人主页:@周小末天天开心 各位大佬的点赞👍 收藏⭐ 关注✅,是本人学习的最大动力 感谢! 📕该篇文章收录专栏—数据结构 目录 什么是队列? 数组模拟队列 分析 存入队列的步骤 使用数组模拟队列—

    2024年01月19日
    浏览(60)
  • Python基础知识详解:数据类型、对象结构、运算符完整分析

    Python提供了丰富的数据类型,让我们可以灵活地处理各种数据。 首先是数值类型。数值类型包括整型、浮点型和复数。 整型(int)用于表示整数,例如年龄、数量等。我们可以直接将一个整数赋值给一个变量,如下所示: 浮点型(float)用于表示带有小数点的数,例如长度

    2024年02月09日
    浏览(70)
  • 算法分析与设计考前冲刺 (算法基础、数据结构与STL、递归和分治、 动态规划、贪心算法、 回溯算法)

    算法分析与设计考前冲刺 算法基础 算法是一系列解决问题的清晰指令,代表着用系统的方法描述解决问题的策略机制。 程序是算法用某种程序设计语言的具体的 具体实现 算法特征: 有穷性(有限步) 确定性 输入 输出 可行性(有限时间) 算法的复杂性: 时间复杂性 和空间复

    2024年02月02日
    浏览(44)
  • 【数据分析入门】人工智能、数据分析和深度学习是什么关系?如何快速入门 Python Pandas?

    本文详细介绍了人工智能、数据分析和深度学习之间的关系,并就数据分析所需的Pandas库做了胎教般的入门引导。祝读得开心!   本文是原 《数据分析大全》 、现改名为 《数据分析》 专栏的第二篇,我在写这篇文章的时候突然意识到—— 单靠我是不可能把数据分析的方

    2024年02月14日
    浏览(74)
  • 08-pandas 入门-pandas的数据结构

    要使用pandas,你首先就得熟悉它的两个主要数据结构:Series和DataFrame。虽然它们并不能解决所有问题,但它们为大多数应用提供了一种可靠的、易于使用的基础。 Series是一种类似于一维数组的对象,它由一组数据(各种NumPy数据类型)以及一组与之相关的数据标签(即索引)

    2024年02月11日
    浏览(38)
  • 数据分析基础之《pandas(7)—高级处理2》

    四、合并 如果数据由多张表组成,那么有时候需要将不同的内容合并在一起分析 1、先回忆下numpy中如何合并 水平拼接     np.hstack() 竖直拼接     np.vstack() 两个都能实现     np.concatenate((a, b), axis=) 2、pd.concat([data1, data2], axis=1) 按照行或者列进行合并,axis=0为列索引,axis=1为

    2024年02月19日
    浏览(42)
  • 使用Pandas进行数据处理和分析的入门指南

    摘要:本文将介绍如何使用Python的Pandas库进行数据处理和分析,包括数据导入、数据清洗、数据转换和简单分析等方面的内容。 在数据科学和数据分析领域,数据处理是一个关键的步骤。Python的Pandas库提供了强大且易于使用的工具,使数据处理变得简单和高效。本文将引导您

    2024年02月10日
    浏览(79)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包