从本文开始介绍pandas的相关知识。

pandas含有是数据分析工作变得更快更简单的高级数据结构和操作工具,是基于numpy构建的。

本章节的代码引入pandas约定为:import pandas as pd,另外import numpy as np也会用到。

官方介绍:pandas - Python Data Analysis Library (pydata.org)

pandas数据结构介绍:主要有两种:Series和DataFrame。本文对DataFrame进行简单介绍。

2 DataFrame介绍

官方文档:DataFrame — pandas 1.3.4 documentation (pydata.org)

DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型等)。DataFrame既可以行索引也可以列索引,它可以被看作由Series组成的字典(共用同一个索引)。DataFrame中的数据是以一个或多个二维块存放的(而不是列表、字典或别的一维数据结构)。

2.1 构建DataFrame

最常见的一种是直接传入一个等长列表或NumPy数组组成的字典,DataFrame会自动加上索引(和Series一样),且全部列会被有序排列。如果指定了列序列,就会按照指定顺序进行排列,如果传入的列在数据中找不到,就会产生NaN值。

 1 >>> data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada'], 'year': [2000, 2001, 2002, 2001, 2002], 'pop': [1.5, 1.7, 3.6, 2.4, 2.9]}
2 >>> frame = pd.DataFrame(data)
3 >>> frame
4 state year pop
5 0 Ohio 2000 1.5
6 1 Ohio 2001 1.7
7 2 Ohio 2002 3.6
8 3 Nevada 2001 2.4
9 4 Nevada 2002 2.9
10 >>> pd.DataFrame(data, columns=['year', 'state', 'pop']) #指定列序列
11 year state pop
12 0 2000 Ohio 1.5
13 1 2001 Ohio 1.7
14 2 2002 Ohio 3.6
15 3 2001 Nevada 2.4
16 4 2002 Nevada 2.9
17 >>> frame2 = pd.DataFrame(data, columns=['year', 'state', 'pop', 'debt'], index=['one', 'two', 'three', 'four', 'five'])
19 >>> frame2
20 year state pop debt
21 one 2000 Ohio 1.5 NaN
22 two 2001 Ohio 1.7 NaN
23 three 2002 Ohio 3.6 NaN
24 four 2001 Nevada 2.4 NaN
25 five 2002 Nevada 2.9 NaN
26 >>>

另一种常见的数据形式是嵌套字典(也就是字典的字典)。外层字典的键作为列,内层键则作为行索引。内层字典的键会被合并、排序以形成最终的索引。

 1 >>> pop = {'Nevada': {2001: 2.4, 2002:2.9}, 'Ohio':{2000: 1.5, 2001: 1.7, 2002: 3.6}}
2 >>> frame3 = pd.DataFrame(pop)
3 >>> frame3
4 Nevada Ohio
5 2001 2.4 1.7
6 2002 2.9 3.6
7 2000 NaN 1.5
8 >>> frame3.T #可以进行转置
9 2001 2002 2000
10 Nevada 2.4 2.9 NaN
11 Ohio 1.7 3.6 1.5
12 >>> pd.DataFrame(pop, index=[2001, 2002, 2003]) #显示指定索引
13 Nevada Ohio
14 2001 2.4 1.7
15 2002 2.9 3.6
16 2003 NaN NaN
17 >>>

下表是DataFrame构造函数所能接受的各种数据。

类型 说明
二维ndarray 数据矩阵,还可以传入行标和列标
由数组、列表或元组组成的字典 每个序列会变成Datarame的一列,所有序列的长度必须相同。
NumPy的结构化/记录数组 类似于“由数组组成的字典”
由Series组成的字典 每个Series会称为一列,如果没有显示指定索引,则各Series的索引会被合并成结果的行索引。
由字典组成的字典 各内层字典会成为一列,键会被合并成结果的行索引,跟“由Series组成的字典”的情况一样。
字典或Series的列表 各项将会成为DataFrame的一行,字典键或Series索引的并集将会成为DataFrame的列标。
由列表或元组组成的列表 类似于“二维ndarray”
另一个DataFrame 该DataFrame的索引将被沿用,除非显示指定了其他索引
NumPy的MaskedArray 类似于“二维ndarray”的情况,知识掩码值在结果DataFrame会变成Na/缺省值。

2.2 获取值

通过字典标记的方式或属性的方式,可以将DataFrame的列获取为一个Series。返回的Series拥有原DataFrame相同的索引,且其name属性已经被相应的设置好了。

 1 >>> frame2
2 year state pop debt
3 one 2000 Ohio 1.5 NaN
4 two 2001 Ohio 1.7 NaN
5 three 2002 Ohio 3.6 NaN
6 four 2001 Nevada 2.4 NaN
7 five 2002 Nevada 2.9 NaN
8 >>> frame2['state']
9 one Ohio
10 two Ohio
11 three Ohio
12 four Nevada
13 five Nevada
14 Name: state, dtype: object
15 >>> frame2.year
16 one 2000
17 two 2001
18 three 2002
19 four 2001
20 five 2002
21 Name: year, dtype: int64

2.3 赋值

列可以通过赋值的方式进行修改。

 1 >>> frame2
2 year state pop debt
3 one 2000 Ohio 1.5 NaN
4 two 2001 Ohio 1.7 NaN
5 three 2002 Ohio 3.6 NaN
6 four 2001 Nevada 2.4 NaN
7 five 2002 Nevada 2.9 NaN
8 >>> frame2['debt'] = 16.5
9 >>> frame2
10 year state pop debt
11 one 2000 Ohio 1.5 16.5
12 two 2001 Ohio 1.7 16.5
13 three 2002 Ohio 3.6 16.5
14 four 2001 Nevada 2.4 16.5
15 five 2002 Nevada 2.9 16.5
16 >>> frame2['debt'] = np.arange(5)
17 >>> frame2
18 year state pop debt
19 one 2000 Ohio 1.5 0
20 two 2001 Ohio 1.7 1
21 three 2002 Ohio 3.6 2
22 four 2001 Nevada 2.4 3
23 five 2002 Nevada 2.9 4
24 >>>

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

 1 >>> frame2
2 year state pop debt
3 one 2000 Ohio 1.5 0
4 two 2001 Ohio 1.7 1
5 three 2002 Ohio 3.6 2
6 four 2001 Nevada 2.4 3
7 five 2002 Nevada 2.9 4
8 >>> val = pd.Series([-1.2, -1.5, -1.7], index=['two', 'four', 'five'])
9 >>> frame2.debt = val
10 >>> frame2
11 year state pop debt
12 one 2000 Ohio 1.5 NaN
13 two 2001 Ohio 1.7 -1.2
14 three 2002 Ohio 3.6 NaN
15 four 2001 Nevada 2.4 -1.5
16 five 2002 Nevada 2.9 -1.7
17 >>>

为不存在的列赋值会创建一个新列,关键字del用于删除列:

 1 >>> frame2
2 year state pop debt
3 one 2000 Ohio 1.5 NaN
4 two 2001 Ohio 1.7 -1.2
5 three 2002 Ohio 3.6 NaN
6 four 2001 Nevada 2.4 -1.5
7 five 2002 Nevada 2.9 -1.7
8 >>> frame2['eastern'] = frame2.state == 'Ohio'
9 >>> frame2
10 year state pop debt eastern
11 one 2000 Ohio 1.5 NaN True
12 two 2001 Ohio 1.7 -1.2 True
13 three 2002 Ohio 3.6 NaN True
14 four 2001 Nevada 2.4 -1.5 False
15 five 2002 Nevada 2.9 -1.7 False
16 >>> del frame2['eastern']
17 >>> frame2.columns
18 Index(['year', 'state', 'pop', 'debt'], dtype='object')
19 >>>

2.4 其他

如果设置了DataFrame的index和columns的name属性。这些信息也会被显示出来。

 1 >>> frame3
2 Nevada Ohio
3 2001 2.4 1.7
4 2002 2.9 3.6
5 2000 NaN 1.5
6 >>> frame3.index.name = 'year'
7 >>> frame3.columns.name = 'state'
8 >>> frame3
9 state Nevada Ohio
10 year
11 2001 2.4 1.7
12 2002 2.9 3.6
13 2000 NaN 1.5
14 >>> frame3.values
15 array([[2.4, 1.7],
16 [2.9, 3.6],
17 [nan, 1.5]])
18 >>>

pandas基础--数据结构:DataFrame的更多相关文章

  1. pandas 学习 第1篇:pandas基础 - 数据结构和数据类型

    pandas是基于NumPy构建的模块,含有使数据分析更快更简单的操作工具和数据结构,是数据分析必不可少的五个包之一.pandas包含序列Series和数据框DataFrame两种最主要数据结构,索引 ...

  2. pandas基础,Serires,Dataframe

    DataFrame DataFrame是Pandas中的一个表格型的数据结构,包含有一组有序的列,每列可以是不同的值类型(数值.字符串.布尔型等),DataFrame即有行索引也有列索引,可以被看做是 ...

  3. Pandas 基础(2) - Dataframe 基础

    上一节我们已经对 Dataframe 的概念做了一个简单的介绍, 这一节将具体看下它的一些基本用法: 首先, 准备一个 excel 文件, 大致内容如下, 并保存成 .csv 格式. 然后, 在 ju ...

  4. 利用Python进行数据分析(7) pandas基础: Series和DataFrame的简单介绍

    一.pandas 是什么 pandas 是基于 NumPy 的一个 Python 数据分析包,主要目的是为了数据分析.它提供了大量高级的数据结构和对数据处理的方法. pandas 有两个主要的数据结构 ...

  5. 利用Python进行数据分析(8) pandas基础: Series和DataFrame的基本操作

    一.reindex() 方法:重新索引 针对 Series   重新索引指的是根据index参数重新进行排序. 如果传入的索引值在数据里不存在,则不会报错,而是添加缺失值的新行. 不想用缺失值,可以用 ...

  6. 02. Pandas 1|数据结构Series、Dataframe

    1."一维数组"Series Pandas数据结构Series:基本概念及创建 s.index  . s.values # Series 数据结构 # Series 是带有标签的一 ...

  7. pandas 的数据结构(Series, DataFrame)

    Pandas 讲解 Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的. Pandas 纳入了大量库和一些标 ...

  8. pandas 的数据结构Series与DataFrame

    pandas中有两个主要的数据结构:Series和DataFrame. [Series] Series是一个一维的类似的数组对象,它包含一个数组数据(任何numpy数据类型)和一个与数组关联的索引. ...

  9. Pandas 数据结构Dataframe:基本概念及创建

    "二维数组"Dataframe:是一个表格型的数据结构,包含一组有序的列,其列的值类型可以是数值.字符串.布尔值等. Dataframe中的数据以一个或多个二维块存放,不是列表.字 ...

  10. pandas中的数据结构-DataFrame

    pandas中的数据结构-DataFrame DataFrame是什么? 表格型的数据结构 DataFrame 是一个表格型的数据类型,每列值类型可以不同 DataFrame 既有行索引.也有列索引 ...

随机推荐

  1. Javscript数组的常用方法有哪些?

    数组基本操作可以归纳为 增.删.改.查,需要留意的是哪些方法会对原数组产生影响,哪些方法不会 下面对数组常用的操作方法做一个归纳 增 下面前三种是对原数组产生影响的增添方法,第四种则不会对原数组产生影 ...

  2. Windows 系统上如何安装 Python 环境(详细教程)

    Windows 系统上如何安装 Python 环境(详细教程) 目前,Python有两个版本,一个是2.x版,一个是3.x版,这两个版本是不兼容的.由于2.x版官方只维护到2020年,所以以3.x版作 ...

  3. 《Effective C#》系列之(二)——如何使代码易于阅读和理解

    在<Effective C#>这本书中,使代码更易于阅读和理解是其中一章的主要内容.以下是该章节的一些核心建议: 使用清晰.有意义的名称:变量.方法.类型等的名称应该能够准确地描述其含义, ...

  4. Django框架——Q查询进阶、ORM查询优化、事务操作、字段类型、字段参数、Ajax、Content—Type、ajax携带文件

    Q查询进阶 from django.db.models import Q q_obj = Q() # 1.产生q对象 q_obj.connector = 'or' # 默认多个条件的连接是and可以修 ...

  5. css添加属性,让浏览器检查无法选中元素

    1.表现 浏览器直接选中元素的时候,仅能直接选中整个body,想要找到具体元素,需要自己手动寻找,没太大实际作用,仅仅让不懂的人不能简简单单的直接定位元素然后修改里面的内容 pointer-event ...

  6. mysql错误ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

  7. K8s场景下Logtail组件可观测方案升级-Logtail事件监控发布

    简介: SLS针对Logtail本身以及Logtail的管控组件alibaba-log-controller,采用K8s事件的方式,将处理流程中的关键事件透出,从而让用户能够更清楚的感知其中发生的异常 ...

  8. [Blockchain] 以太坊主流测试网 ropsten 和 kovan 的区别 以及 如何选择

    ropsten 采用 POW (Proof-of-Work)共识机制,挖矿难度系数非常低,容易被攻击,不够低碳环保. kovan 采用 POA (Proof-of-Authority)共识机制,不需要 ...

  9. uniapp+vue3聊天室|uni-app+vite4+uv-ui跨端仿微信app聊天语音/朋友圈

    原创研发uniapp+vue3+pinia2跨三端仿微信app聊天模板Uniapp-Wechat. uni-vue3-wchat基于uni-app+vue3+pinia2+uni-ui+uv-ui等技 ...

  10. JavaScript前端时间库moment.js

    1.获取当前时间 moment().format("YYYY-MM-DD HH:mm:ss"); moment().format("YYYY-MM-DD"); ...