IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 【Python】11.Pandas库 -> 正文阅读

[Python知识库]【Python】11.Pandas库


任务简介:

numpy的表现已经很好了,但是当我们需要处理更灵活的数据任务的时候(如为数据添加标签、 处理缺失值、分组等),numpy 的限制就非常明显了,基于numpy而创建的pandas 库提供了一种高效的带行标签和列标签的数据结构DataFrame,完美地解决了上述问题。

任务说明:

1、掌握DataFrame数据结构的创建和基本性质。

2、掌握Pandas库的数值运算和统计分析方法。

3、掌握DataFrame缺失值处理、数据集合并等操作。

4、掌握DataFrame累计与分组操作。

5、用eval和query实现更高效的计算。


一、引子

Numpy 在向量化的数值计算中表现优异

但是在处理更灵活、复杂的数据任务:

如为数据添加标签、处理缺失值、分组和透视表等方面

Numpy显得力不从心

而基于Numpy构建的Pandas库,提供了使得数据分析变得更快更简单的高级数据结构和操作工具

二、对象创建

1. Pandas Series对象

Series 是带标签数据的一维数组

Series对象的创建:

通用结构: pd.Series(data, index=index, dtype=dtype)

data: 数据,可以是列表,字典或Numpy数组

index: 索引,为可选参数

dtype: 数据类型,为可选参数

  1. 用列表创建
  • index缺省,默认为整数序列

输入:

import pandas as pd

data = pd.Series([1.5, 3, 4.5, 6])
data

输出:

0    1.5
1    3.0
2    4.5
3    6.0
dtype: float64
  • 增加index

输入:

data = pd.Series([1.5, 3, 4.5, 6], index=["a", "b", "c", "d"])
data

输出:

a    1.5
b    3.0
c    4.5
d    6.0
dtype: float64
  • 增加数据类型

缺省则从传入的数据自动判断

输入:

data = pd.Series([1, 2, 3, 4], index=["a", "b", "c", "d"])    
data

输出:

a    1
b    2
c    3
d    4
dtype: int64

输入:

data = pd.Series([1, 2, 3, 4], index=["a", "b", "c", "d"], dtype="float")
data

输出:

a    1.0
b    2.0
c    3.0
d    4.0
dtype: float64

注意:数据支持多种类型

输入:

data = pd.Series([1, 2, "3", 4], index=["a", "b", "c", "d"])
data

输出:

a    1
b    2
c    3
d    4
dtype: object

输入:

data["a"]

输出:

1

输入:

data["c"]

输出:

'3'

数据类型可被强制改变

输入:

data = pd.Series([1, 2, "3", 4], index=["a", "b", "c", "d"], dtype=float)
data

输出:

a    1.0
b    2.0
c    3.0
d    4.0
dtype: float64

输入:

data["c"]

输出:

3.0

输入:

data = pd.Series([1, 2, "a", 4], index=["a", "b", "c", "d"], dtype=float)
data

输出:

ValueError: could not convert string to float: 'a'
  1. 用一维numpy数组创建

输入:

import numpy as np

x = np.arange(5)
pd.Series(x)

输出:

0    0
1    1
2    2
3    3
4    4
dtype: int32
  1. 用字典创建
  • 默认以键为index 值为data

输入:

population_dict = {"BeiJing": 2154,
                   "ShangHai": 2424,
                   "ShenZhen": 1303,
                   "HangZhou": 981 }
population = pd.Series(population_dict)    
population

输出:

BeiJing     2154
ShangHai    2424
ShenZhen    1303
HangZhou     981
dtype: int64
  • 字典创建,如果指定index,则会到字典的键中筛选,找不到的,值设为NaN

输入:

population = pd.Series(population_dict, index=["BeiJing", "HangZhou", "c", "d"])    
population

输出:

BeiJing     2154.0
HangZhou     981.0
c              NaN
d              NaN
dtype: float64
  1. data为标量的情况

输入:

pd.Series(5, index=[100, 200, 300])

输出:

100    5
200    5
300    5
dtype: int64

2. Pandas DataFrame对象

DataFrame 是带标签数据的多维数组

DataFrame对象的创建

通用结构: pd.DataFrame(data, index=index, columns=columns)

data: 数据,可以是列表,字典或Numpy数组

index: 索引,为可选参数

columns: 列标签,为可选参数

  1. 通过Series对象创建

输入:

population_dict = {"BeiJing": 2154,
                   "ShangHai": 2424,
                   "ShenZhen": 1303,
                   "HangZhou": 981 }

population = pd.Series(population_dict)    
pd.DataFrame(population)

输出:

输入:

pd.DataFrame(population, columns=["population"])

输出:
在这里插入图片描述

  1. 通过Series对象字典创建

输入:

GDP_dict = {"BeiJing": 30320,
            "ShangHai": 32680,
            "ShenZhen": 24222,
            "HangZhou": 13468 }

GDP = pd.Series(GDP_dict)
GDP

输出:

BeiJing     30320
ShangHai    32680
ShenZhen    24222
HangZhou    13468
dtype: int64

输入:

pd.DataFrame({"population": population,
              "GDP": GDP})

输出:
在这里插入图片描述
注意:数量不够的会自动补齐

输入:

pd.DataFrame({"population": population,
              "GDP": GDP,
              "country": "China"})

输出:
在这里插入图片描述

  1. 通过字典列表对象创建
  • 字典索引作为index,字典键作为columns

输入:

import numpy as np
import pandas as pd

data = [{"a": i, "b": 2*i} for i in range(3)]
data

输出:

[{'a': 0, 'b': 0}, {'a': 1, 'b': 2}, {'a': 2, 'b': 4}]

输入:

data = pd.DataFrame(data)
data

输出:
在这里插入图片描述
输入:

data1 = data["a"].copy()
data1  # 变成Series

输出:

0    0
1    1
2    2
Name: a, dtype: int64

输入:

data1[0] = 10
data1

输出:

0    10
1     1
2     2
Name: a, dtype: int64

输入:

data

输出:
在这里插入图片描述

  • 不存在的键,会默认值为NaN

输入:

data = [{"a": 1, "b":1},{"b": 3, "c":4}]
data

输出:

[{'a': 1, 'b': 1}, {'b': 3, 'c': 4}]

输入:

pd.DataFrame(data)

输出:
在这里插入图片描述

  1. 通过Numpy二维数组创建

输入:

data = np.random.randint(10, size=(3, 2))
data

输出:

array([[8, 5],
       [1, 5],
       [5, 8]])

输入:

pd.DataFrame(data, columns=["foo", "bar"], index=["a", "b", "c"])

输出:
在这里插入图片描述

三、DataFrame性质

1. 属性

输入:

data = pd.DataFrame({"pop": population, "GDP": GDP})
data

输出:
在这里插入图片描述
(1)df.values 返回numpy数组表示的数据

输入:

data.values

输出:

array([[ 2154, 30320],
       [ 2424, 32680],
       [ 1303, 24222],
       [  981, 13468]], dtype=int64)

(2)df.index 返回行索引

输入:

data.index

输出:

Index(['BeiJing', 'ShangHai', 'ShenZhen', 'HangZhou'], dtype='object')

(3)df.columns 返回列索引

输入:

data.columns

输出:

Index(['pop', 'GDP'], dtype='object')

(4)df.shape 形状

输入:

data.shape

输出:

(4, 2)

(5) pd.size 大小

输入:

data.size

输出:

8

(6)pd.dtypes 返回每列数据类型

输入:

data.dtypes

输出:

pop    int64
GDP    int64
dtype: object

2. 索引

输入:

data

输出:
在这里插入图片描述
(1)获取列

  • 字典式

输入:

data["pop"]

输出:

BeiJing     2154
ShangHai    2424
ShenZhen    1303
HangZhou     981
Name: pop, dtype: int64

输入:

data[["GDP", "pop"]]

输出:
在这里插入图片描述

  • 对象属性式

输入:

data.GDP

输出:

BeiJing     30320
ShangHai    32680
ShenZhen    24222
HangZhou    13468
Name: GDP, dtype: int64

(2)获取行

  • 绝对索引 df.loc

输入:

data.loc["BeiJing"]

输出:

pop     2154
GDP    30320
Name: BeiJing, dtype: int64

输入:

data.loc[["BeiJing", "HangZhou"]]

输出:
在这里插入图片描述

  • 相对索引 df.iloc

输入:

data

输出:
在这里插入图片描述
输入:

data.iloc[0]

输出:

pop     2154
GDP    30320
Name: BeiJing, dtype: int64

输入:

data.iloc[[1, 3]]

输出:
在这里插入图片描述
(3)获取标量

输入:

data

输出:
在这里插入图片描述
输入:

data.loc["BeiJing", "GDP"]

输出:

30320

输入:

data.iloc[0, 1]

输出:

30320

输入:

data.values[0][1]

输出:

30320

(4)Series对象的索引

输入:

type(data.GDP)

输出:

pandas.core.series.Series

输入:

GDP

输出:

BeiJing     30320
ShangHai    32680
ShenZhen    24222
HangZhou    13468
dtype: int64

输入:

GDP["BeiJing"]

输出:

30320

3. 切片

输入:

dates = pd.date_range(start='2019-01-01', periods=6)
dates

输出:

DatetimeIndex(['2021-08-01', '2021-08-02', '2021-08-03', '2021-08-04',
               '2021-08-05', '2021-08-06'],
              dtype='datetime64[ns]', freq='D')

输入:

df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=["A", "B", "C", "D"])
df

输出:
在这里插入图片描述
(1)行切片

输入:

df["2021-08-01": "2021-08-03"]

输出:
在这里插入图片描述
输入:

df.loc["2021-08-01": "2021-08-03"]

输出:
在这里插入图片描述
输入:

df.iloc[0: 3]

输出:
在这里插入图片描述
(2)列切片

输入:

df

输出:
在这里插入图片描述
输入:

df.loc[:, "A": "C"]

输出:
在这里插入图片描述
输入:

df.iloc[:, 0: 3]

输出:
在这里插入图片描述
(3)多种多样的取值

输入:

df

输出:
在这里插入图片描述

  • 行、列同时切片

输入:

df.loc["2021-08-02": "2021-08-03", "C":"D"]

输出:
在这里插入图片描述
输入:

df.iloc[1: 3, 2:]

输出:
在这里插入图片描述

  • 行切片,列分散取值

输入:

df.loc["2021-08-04": "2021-08-06", ["A", "C"]]

输出:
在这里插入图片描述
输入:

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

输出:
在这里插入图片描述

  • 行分散取值,列切片

输入:

df.loc[["2021-08-02", "2021-08-06"], "C": "D"]

输出:
在这里插入图片描述
输入:

df.iloc[[1, 5], 0: 3]

输出:
在这里插入图片描述

  • 行、列均分散取值

输入:

df.loc[["2021-08-04", "2021-08-06"], ["A", "D"]]

输出:
在这里插入图片描述
输入:

df.iloc[[1, 5], [0, 3]]

输出:
在这里插入图片描述

4. 布尔索引

输入:

df

输出:
在这里插入图片描述
输入:

df > 0

输出:
在这里插入图片描述
输入:

df[df > 0]

输出:
在这里插入图片描述

输入:

df.A > 0

输出:

2021-08-01     True
2021-08-02     True
2021-08-03    False
2021-08-04     True
2021-08-05     True
2021-08-06    False
Freq: D, Name: A, dtype: bool

输入:

df[df.A > 0]

输出:
在这里插入图片描述

  • isin()方法

输入:

df2 = df.copy()
df2['E'] = ['one', 'one', 'two', 'three', 'four', 'three']
df2

输出:
在这里插入图片描述
输入:


输出:


输入:


输出:


输入:


输出:


输入:


输出:


输入:


输出:


输入:


输出:


输入:


输出:


输入:


输出:


  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-08-01 14:27:47  更:2021-08-01 14:27:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/2 13:31:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码