全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 数据分析师(CDA)专版
2653 28
2023-11-22

文章来源于山有木兮
cda原文链接:https://edu.cda.cn/goods/show/3429?targetId=5724&preview=0

第1节 Python基础知识

近年来,随着数据科学的逐步发展,Python语言的使用率也越来越高,不仅可以做数据处理,网页开发,更是数据科学、机器学习、深度学习等从业者的首选语言。

TIOBE Index for October 2023

“工欲善其事,必先利其器。” 要做好数据分析,离不开一个好的编程工具,不论是从Python的语法之简洁、开发之高效,招聘岗位之热门来说,Python都是数据科学从业者需要掌握的一门语言。

但一直以来,人们却误以为“学会Python”是件很难的事情。

实则不然,这恰恰是我们选择学Python的理由之一。

事实证明,Python人人皆能学会——千万别不信。

  • 老少皆宜 —— 也就是说,“只要你愿意”,根本没有年龄差异。十二岁的孩子可以学;十八岁的大学生可以学;在职工作人员可以学…… 就算你已经退休了,想学就能学,谁也拦不住你。

  • 不分性别,男性可以学,女性同样可以学,性别差异在这里完全不存在。

  • 不分国界,更没有区域差异 —— 互联网的恩惠在于,你在北京、纽约也好,老虎沟、门头沟也罢,在这个领域里同样完全没有任何具体差异。

尤其是在中国。现状是,中国的人口密度极高,优质教育资源的确就是稀缺…… 但在计算机科学领域,所有的所谓 “优质教育资源” 事实上完全没有任何独特的竞争力 —— 编程领域,实际上是当今世上极为罕见的 “教育机会公平之地”。又不仅在中国如此,事实上,在全球范围内也都是如此。

多年以前,不识字的人被称为文盲……

后来,不识英文,也是文盲。人们发现很多科学文献的主导语言都是英语……

再后来,不会计算机的也算是文盲,因为不会计算机基本操作,很多工作的效率很低下,浪费了很多时间……

近些年,不会数据分析的,也算做文盲了,互联网高速发展,用户行为数据越来越多,

你作为一个个体,每天都在产生各种各样的数据,然后时时刻刻都在被别人使用着、分析着…… 然而你自己却全然没有数据分析能力,甚至不知道这事很重要,是不是感觉很可怕?你看看周边那么多人,有多大的比例想过这事?反正那些天天看机器算法生成的信息流的人好像就是全然不在意自己正在被支配……

怎么办?学呗,学点编程罢 —— 巧了,这还真是个正常人都能学会的技能。

为便于上手学习,在开始前再做两点补充

  1. 安装开发工具

众所周知,在数据分析相关的编程语言中,有三个重中之重:Python、R、Julia 俗称数据科学三剑客。如果有一个工具能集中编写这三者的代码,为大家省去各种安装开发工具的时间,那简直太好不过了,于是jupyter应运而生,作为“工具的工具”而备受数据科学从业者的青睐!

Jupyter的名字就很好地诠释了这一发集大成的思路,它是 Julia、Python、R 语言的组合,拼写相近于木星(Jupiter),而且现在支持的语言也远超这三种了。

所以需要读者自行下载安装好Anaconda提供的Jupyter notebook或者jupyter lab,以便于更好地运行本文相关代码。安装好后可以直接运行Python,因为里面已经帮你集成好了环境。

  1. 文章阅读指南

虽然笔者力求极简,带你入门Python,但你依然有可能遇到问题,因为编程语言的知识体系有一个特点,知识点之间不是线性的从前往后,而是呈网状的,经常出现前置引用。所以很多时候可能不经意间就用的是后面的知识点,这是不可避免的,遇到这种情况,注定要反复阅读若干遍,之所以取名叫极简入门,这一部分的目标就在与并不是让你立马学会就去写代码,而是让你脱盲……

好了,接下来,与大家一起开始我们的Python旋风之旅,沿用之前《极简统计学入门》《SQL数据分析极简入门》的“MVP”思路,用三节的内容梳理一下Python数据分析的核心内容。整个系列框架如下:

  • 第1节 Python基础知识

    • 1-Python简介
    • 2-数据类型
    • 3-流程控制
    • 4-函数
  • 第2节 Pandas基础知识

    • 1-Pandas 简介
    • 2-Pandas 数据类型-
    • 3-Pandas 数据选取-
    • 4-Pandas 条件查询-
    • 5-Pandas 数据运算-
    • 6-Pandas 合并拼接-
    • 7-Pandas 分组聚合-
    • 8-Pandas 重塑透视-
  • 第3节 Pandas基础知识

    • 9-Pandas 文本数据
    • 10-Pandas 时间数据
    • 11-Pandas 窗口数据
    • 12-Pandas 数据读写
    • 13-Pandas 表格样式
    • 14-Pandas 数据可视化

如果你接触过不同编程语言就会发现,任何编程语言的学习,都离不开3个最基本的核心要素,数据类型、流程控制、函数

数据类型是用来描述数据的性质和特征的,它决定了数据在计算和处理过程中的行为和规则。常见的数据类型包括整数、浮点数、字符串、日期等。简而言之,就是你将要操作的东西具有什么样的特点

流程控制是指通过条件判断和循环等方式,控制程序按照一定的顺序执行不同的操作步骤。它决定了数据的处理流程,包括判断条件、循环次数、分支选择等。简而言之,就是你要操作这个东西的基本流程是什么

函数是一段预先定义好的代码,用于执行特定的操作或计算。它接受输入参数,并返回一个结果。函数可以用来对数据进行各种计算、转换、筛选等操作,以满足特定的需求。简而言之,就是你要怎么样才能可复用地操作这一类东西

我们来看第一个核心要素:数据类型

数据类型

Python中的数据类型有很多,如果我们按照大类来分,可以分为三大数据类型:

① 数字型

整型 int

a = 2022                  # 把2022赋值给a
type(a)                   # 查看数据类型:<class 'int'>
int

浮点型 float

b = -21.9
type(b)                   # 数据类型:<class 'float'>
float

复数型 complex

c = 11 + 36j
type(c)                   # 数据类型:<class 'complex'>
complex

布尔型 bool

d = True
type(d)                   # 数据类型:<class 'bool'>
bool

② 字符串型

str_a = "Certified_Data_Analyst"            # 创建字符串:"Certified_Data_Analyst"
type(str_a)                                 # 数据类型:<class 'str'>
str
len(str_a)                 # 字符串长度:
22
str_a[0]                   # 输出字符串第1个字符
'C'
str_a[10]                  # 输出字符串第11个字符
'D'
str_a[15]                  # 输出字符串第16个字符
'A'
str_a[:9]                   # 输出字符串第1到9个字符
'Certified'
str_a[10:14]                # 输出从第11到14个的字符
'Data'
str_a[15:]                  # 输出从第15个后的所有字符
'Analyst'
str_a * 2                   # 输出字符串2次
'Certified_Data_AnalystCertified_Data_Analyst'
str_a+"_Exam"               # 连接字符串 
'Certified_Data_Analyst_Exam'
str_a.upper()               # 转换为大写
'CERTIFIED_DATA_ANALYST'
str_a.lower()               # 转换为小写
'certified_data_analyst'
int("1024")                 # 字符串转数字:1024
1024
str(3.14)                   # 数字转字符串:'3.14'
'3.14'
"Certified_Data_Analyst".split("_")        # 分隔符拆分字符串
['Certified', 'Data', 'Analyst']
"Certified_Data_Analyst".replace("_", " ") # 替换字符串"_"为" "
'Certified Data Analyst'
"7".zfill(3)              # 左边补0
'007'

③ 容器型

可以容纳多个元素的的对象叫做容器,这个概念比较抽象,你可以这么理解,容器用来存放不同的元素,根据存放特点的不同,常见的容器有以下几种:list列表对象、tuple列表对象、dict列表对象、set集合对象

列表 list()

用中括号[]可以创建一个list变量

[2,3,5,7]
[2, 3, 5, 7]

元组 tuple()

用圆括号()可以创建一个tuple变量

(2,3,5,7)
(2, 3, 5, 7)

集合 set()

用花括号{}可以创建一个集合变量

{2,3,5,7}
{2, 3, 5, 7}

字典 dict()

用花括号{}和冒号:,可以创建一个字典变量

{'a':2,'b':3,'c':5,'d':7}
{'a': 2, 'b': 3, 'c': 5, 'd': 7}

流程控制

分支

举例说明,我们给x赋值-10,然后通过一个分支做判断,当x大于零时候输出"x是正数",当x小于零的时候输出"x是负数",其他情况下输出"x是零"

x = -10

if x > 0:
    print("x是正数")
elif x < 0:
    print("x是负数")
else:
    print("x是零")
x是负数

循环

举例说明for循环,用for循环来迭代从1到5的数字,并将每个数字打印出来

# for循环
for i in range(1, 6):
    print(i)
1
2
3
4
5

首先,range(1, 6)函数生成一个序列,从1到5(不包括6)。

然后,for循环使用变量i来迭代这个序列中的每个元素。

在每次迭代中,print(i)语句将当前的i值打印出来。

再举例说明while循环:用while循环迭代从1到10的数字,并将每个数字打印出来

# while循环
i = 1
while i <= 10:
    print(i)
    i += 1
    if i == 6:
        break
1
2
3
4
5

首先,将i初始化为1。

然后,while循环将在i小于或等于10时执行。在每次循环中,print(i)语句将当前的i值打印出来。

接下来,i += 1语句将i的值递增。在每次循环中,if i == 6: break语句将检查i的值是否等于6。如果是,则使用break语句终止循环。

函数

Python提供了许多常用函数,这部分内容数据分析最基础的内容,有部分函数在Python内置库就已经自带

常用函数:

abs(x)           # 返回x的绝对值。

round(x)         # 返回最接近x的整数。如果有两个整数与x距离相等,将返回偶数。

pow(x, y)        # 返回x的y次方。

sqrt(x)          # 返回x的平方根。

max(x1, x2, ...) # 返回一组数中的最大值。

min(x1, x2, ...) # 返回一组数中的最小值。

sum([x1,x2,...]) # 返回可迭代对象中所有元素的和。

也有一些是来自于math库,我们需要用from math import *来引入math库,然后才能调用里面的函数。这个过程就好比你要使用一个工具箱里面的工具,必须先找到工具箱。通过使用这些数学函数,可以进行各种数学计算和数据处理操作。

常用数学函数

# 数学运算函数
from math import *

sqrt(x)                              #x的算术平方根

log(x)                               #自然对数

log2(x)                              #以2为底的常用对数

log10(x)                             #以10为底的常用对数

exp(x)                               #x的e次幂

modf(x)                              #返回x的⼩数部分和整数部分

floor(x)                             #对x向下取值整

ceil(x)                              #对x向上取整

divmod(x,y)                          #接受两个数字,返回商和余数的元组(x//y , x%y)# 三角函数

sin(x)                               #x的正弦值

cos(x)                               #x的余弦值

tan(x)                               #x的正切值

asin(x)                              #x的反正弦值

acos(x)                              #x的反余弦值

atan(x)                              #x的反正切值# 排列组合函数

# from itertools import *
product()                            #序列中的元素进行排列, 相当于使用嵌套循环组合

permutations(p[, r])                 #从序列p中取出r个元素的组成全排列

combinations(p, r)                   #从序列p中取出r个元素组成全组合,元素不允许重复

combinations_with_replacement(p, r)  #从序列p中取出r个元素组成全组合,允许重复# 简单统计函数 pandas

describe()                           #描述性统计

count()                              #非空观测数量

sum()                                #所有值之和

mean()                               #平均值

median()                             #中位数

mode()                               #值的模值

std()                                #标准差

var()                                #方差

min()                                #所有值中的最小值

max()                                #所有值中的最大值

abs()                                #绝对值

prod()                               #数组元素的乘积

corr()                               #相关系数矩阵

cov()                                #协方差矩阵# 排序函数
sort()                               #没有返回值,会改变原有的列表

sorted()                             #需要用一个变量进行接收,不会修改原有列表# 集合运算符号和函数

&                                    #交集

|                                    #并集

-                                    #差集

^                                    #异或集(不相交的部分)

intersection()                       #交集

union()                              #并集

difference()                         #补集

symmetric_difference()               #异或集(不相交的部分)

isdisjoint()                         #两集合有无相同元素

issubset()                           #是不是子集

issuperset()                         #是不是超集# 缺失值处理(Pandas)

np.nan (Not a Number)                #空值

None                                 #缺失值

pd.NaT                               #时间格式的空值# 判断缺失值

isnull()/isna()                      #断Series或Datafr ame中是否包含空值

notnull()                            #与isnull()结果互为取反

isin()                               #判断Series或Datafr ame中是否包含某些值

dropna()                             #删除Series或Datafr ame中的空值

fillna()                             #填充Series或Datafr ame中的空值

ffill()/pad()                        #用缺失值的前一个值填充

bfill()/backfill()                   #用缺失值的后一个值填充

replace()                            #替换Series或Datafr ame中的指定值

自定义函数

自定义函数是一种在Python中自行定义的可重复使用代码块的方法。通过定义自己的函数,可以将一系列操作放在一个函数中,并在需要时多次调用该函数。

举例说明,如何创建和调用一个自定义函数:

def linear(x):
    y = 2*x + 4
    return y

在上面的例子中,我们用def linear(x): 定义了一个名为linear的函数,该函数接收一个参数x。

然后函数体内计算了一个y值,它是x的两倍加上4。

这样,我们调用linea函数的时候,并传入一个参数x时,函数将返回计算得到的y值。例如,如果我们调用linear(3),函数将返回10,因为2*3 + 4 = 10

可以根据具体的需求来编写自定义函数,并在程序中调用它们。

再看一个稍微复杂一点的例子(PS:建议初学者先跳过这个例子)

# 斐波那契数列(通过迭代方法实现)
def fib(n):
    n1=1;n2=1;n3=1
    if n<1:
        print('输入有误!')
        return 0
    else:
        while (n-2) > 0 :
            n3 = n2 + n1
            n1 = n2
            n2 = n3
            n -= 1
        return n3
result = fib(35)
result 
9227465
# 斐波那契数列(通过递归方法实现)
def fib(n):
    if n < 1:
        print('输入有误!')
        return -1
    elif n == 1 or  n == 2:
        return 1
    else:
        return fib(n-1) + fib(n-2)
result = fib(35)
result
9227465
# 斐波那契数列(通过矩阵方法实现)
import numpy  as np
def dotx(a,n):
    for i in range(1,n+1):
        if i == 1:
            b = a
        else :
            b = np.dot(a,b)
    return b


def fib(n):
    a = np.array([[1,1],[1,0]])
    r = dotx(a,n)
    return r[0,1]
result = fib(35)
result
9227465
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2023-11-22 15:41:29

《Python数据分析极简入门》

第2节 1 Pandas简介

说好开始学Python,怎么到了Pandas?

前面说过,既然定义为极简入门,我们只抓核心中的核心。

那怎么样挑核心重点呢?

在你不熟悉的情况下,肯定需要请教别人,需要注意的是,不要去问应该学什么编程语言,而是去问,如果只学一门编程语言,应该学什么?

这样,问题就从多分类的选择题,变成了一道优化题!有人说选择大于努力,而现实中的情况是,我们选的不是答案只有对与错的问题,而是在好、次好与更好之间选更好,这个道理看似简单,但却不容易做到,小到你学Python应该优先学什么,大到一个国家的资源配置应该优先发展什么?本质上都是最优化问题。

回到今天的主题,如果学Python语言,但只学一个库,你要学什么?有人说人工智能好啊,我要学算法,错!算法再牛也需要你从底层的数据开始,所以答案肯定是Pandas,这属于做数据分析处理数据必知必会的内容。

今天的故事,要从08年北京奥运会那年说起,远在纽约一家量化投资公司的打工人Wes McKinney
,由于在日常数据分析工作中 想多摸会儿鱼 备受Excel与SQL等工具的折磨,于是他开始构建了一个新项目 Pandas,用来解决数据处理过程中遇到的全部任务。

Wes McKinney

什么是Pandas?

Pandas是一个开源的Python库,主要用于数据分析、数据处理、数据可视化。

Pandas作为Python数据分析的核心包,提供了大量的数据分析函数,包括数据处理、数据抽取、数据集成、数据计算等基本的数据分析手段。

Pandas的名称来自于面板数据(panel data)和python数据分析(data analysis)的简称。

千万记得Pandas不是咱们的国宝大熊猫的复数形式!!!(尽管这一强调极有可能适得其反,但还是忍不住贴一张panda的图)

Panda

为什么Pandas必学?

  • 比SQL语句还要简洁,查询数据事半功倍!简单

  • 基于Numpy数值计算,数据处理高效运算!高效

  • 支持数值、文本和可视化,快速灵活完成数据需求!强大

如果用一个字来说明,那就是“快”。这个快指的是你从开始构思到写完代码的时间,毫不夸张地说,当你把数据需求用文字梳理清楚的时候,基本上也就相当于用Python实现了这一过程,因为在Python的世界,所见即所得

怎么学Pandas?

把大象放进冰箱里需要三步,打开冰箱门、把大象塞进去、关上冰箱门。同样地,怎么学Pandas,也需要三步

第一步,必须了解Pandas的数据结构。在之前的系列文章里面说过,学习语言学习的三板斧,数据结构,流程控制,自定义函数。这里pandas虽然只是一个库,但同样有其数据结构。

  • pandas 简介
  • pandas 数据类型
    • Series
    • Datafr ame
  • pandas 数据查看

第二步,必须学会用Pandas做数据处理。这是你做数据分析的基本功,里面包含如下内容

  • pandas 条件查询
  • pandas 数据计算
  • pandas 合并连接
  • pandas 分组聚合
  • pandas 数据重塑

第三步,掌握一些Pandas高阶与展示技巧。这是你分析或展示的必备技能

  • pandas 文本数据
  • pandas 时间数据
  • pandas 窗口数据
  • pandas 数据读写
  • pandas 表格样式
  • pandas 数据可视化
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2023-11-22 15:43:35

第2节 2 Pandas数据类型

Pandas 有两种自己独有的基本数据结构。需要注意的是,它固然有着两种数据结构,因为它依然是 Python 的一个库,所以 Python 中有的数据类型在这里依然适用。我们分别看一下这两种数据结构:

Series

Series:一维数组。该结构能够放置各种数据类型,比如字符、整数、浮点数等

我们先引入pandas包,这里有一个约定成俗的写法import pandas as pd 将pandas引入,并命其别名为pd

接着将列表[2,3,5,7,11]放到pd.Series()里面

import pandas as pd
s = pd.Series([2,3,5,7,11],name = 'A')
s
0     2
1     3
2     5
3     7
4    11
Name: A, dtype: int64

Time- Series:以时间为索引的Series

同样的,将列['2024-01-01 00:00:00', '2024-01-01 03:00:00','2024-01-01 06:00:00'] 放到pd.DatetimeIndex()里面

dts1 = pd.DatetimeIndex(['2024-01-01 00:00:00', '2024-01-01 03:00:00','2024-01-01 06:00:00'])
dts1
DatetimeIndex(['2024-01-01 00:00:00', '2024-01-01 03:00:00',
               '2024-01-01 06:00:00'],
              dtype='datetime64[ns]', freq=None)

还有另外一种写法pd.date_range 可以按一定的频率生成时间序列

dts2 = pd.date_range(start='2024-01-01', periods=6, freq='3H')
dts2
DatetimeIndex(['2024-01-01 00:00:00', '2024-01-01 03:00:00',
               '2024-01-01 06:00:00', '2024-01-01 09:00:00',
               '2024-01-01 12:00:00', '2024-01-01 15:00:00'],
              dtype='datetime64[ns]', freq='3H')
dts3 = pd.date_range('2024-01-01', periods=6, freq='d')
dts3
DatetimeIndex(['2024-01-01', '2024-01-02', '2024-01-03', '2024-01-04',
               '2024-01-05', '2024-01-06'],
              dtype='datetime64[ns]', freq='D')

Datafr ame

Datafr ame:二维的表格型数据结构,可以理解为Series的容器,通俗地说,就是可以把Series放到Datafr ame里面。

它是一种二维表格型数据的结构,既有行索引,也有列索引。行索引是 index,列索引是 columns。类似于初中数学里,在二维平面里用坐标轴来定位平面中的点。

注意,Datafr ame又是Pandas的核心!接下来的内容基本上以Datafr ame为主

先来看看如何创建Datafr ame,上面说过Series也好,Datafr ame也罢,本质上都是容器。

千万别被”容器“这个词吓住了,通俗来说,就是里面可以放东西的东西。

从字典创建Datafr ame

相当于给里面放dict:先创建一个字典d,再把d放进了Datafr ame里命名为df

d = {'A': [1, 2, 3], 
     'B': [4, 5, 6],
     'C': [7, 8, 9]}
df = pd.Datafr ame(data = d)
df
A B C
0 1 4 7
1 2 5 8
2 3 6 9

从列表创建Datafr ame

先创建了一个列表d,再把d放进了Datafr ame里命名为df

d = [[4, 7, 10],[5, 8, 11],[6, 9, 12]]
df1 = pd.Datafr ame(
    data = d,
    index=['a', 'b', 'c'],
    columns=['A', 'B', 'C'])
df1
A B C
a 4 7 10
b 5 8 11
c 6 9 12

从数组创建Datafr ame

数组(array)对你来说可能是一个新概念,在Python里面,创建数组需要引入一个类似于Pandas的库,叫做Numpy。与前面引入Pandas类似,我们用 import numpy as np来引入numpy,命其别名为np。

同样的,先创建一个数组d,再把d放进了Datafr ame里命名为df

import numpy as np
d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
df2 = pd.Datafr ame(data = d,
                   index=['a', 'b', 'c'],
                   columns=['A', 'B', 'C'])
df2
A B C
a 1 2 3
b 4 5 6
c 7 8 9

以上,我们用了不同的方式来创建Datafr ame,接下来,我们看看创建好后,如何查看数据


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2023-11-22 15:46:49

第2节 3 Pandas数据查看

这里我们创建一个Datafr ame命名为df

import numpy as np
import pandas as pd
d =  np.array([[81, 28, 24, 25, 96],
       [ 8, 35, 56, 98, 39],
       [13, 39, 55, 36,  3],
       [70, 54, 69, 48, 12],
       [63, 80, 97, 25, 70]])
df = pd.Datafr ame(data = d,
                  columns=list('abcde'))
df
a b c d e
0 81 28 24 25 96
1 8 35 56 98 39
2 13 39 55 36 3
3 70 54 69 48 12
4 63 80 97 25 70

查看前n行

df.head(2)
a b c d e
0 81 28 24 25 96
1 8 35 56 98 39

查看后n行

df.tail(2)
a b c d e
3 70 54 69 48 12
4 63 80 97 25 70

查看随机N行

df.sample(2)
a b c d e
1 8 35 56 98 39
3 70 54 69 48 12

按列选取

单列选取,我们有3种方式可以实现

第一种,直接在[]里面写上要筛选的列名

df['a']
0    81
1     8
2    13
3    70
4    63
Name: a, dtype: int64

第二种,在.iloc[]里的,前面写上要筛选的行索引,在,后面写上要删选的列索引。其中:代表所有,0:3代表从索引0到2

df.iloc[0:3,0]
0    81
1     8
2    13
Name: a, dtype: int64

第三种,直接.后面写上列名

df.a
0    81
1     8
2    13
3    70
4    63
Name: a, dtype: int64

同样的,选择多列常见的也有3种方式:

第一种,直接在[]里面写上要筛选的列名组成的列表['a','c','d']

df[['a','c','d']]
a c d
0 81 24 25
1 8 56 98
2 13 55 36
3 70 69 48
4 63 97 25

第二种,在.iloc[]里面行索引位置写选取所有行,列索引位置写上要筛选的列索引组成的列表[0,2,3]

df.iloc[:,[0,2,3]]
a c d
0 81 24 25
1 8 56 98
2 13 55 36
3 70 69 48
4 63 97 25

第三种,在.loc[]里面的行索引位置写来选取所有行,在列索引位置写上要筛选的列索引组成的列表['a','c','d']

df.loc[:,['a','c','d']]
a c d
0 81 24 25
1 8 56 98
2 13 55 36
3 70 69 48
4 63 97 25

按行选取

直接选取第一行

df[0:1]
a b c d e
0 81 28 24 25 96

loc选取第一行

df.loc[0:0]
a b c d e
0 81 28 24 25 96

选取任意多行

df.iloc[[1,3],]
a b c d e
1 8 35 56 98 39
3 70 54 69 48 12

选取连续多行

df.iloc[1:4,:]
a b c d e
1 8 35 56 98 39
2 13 39 55 36 3
3 70 54 69 48 12

指定行列

指定行列值

df.iat[2,2] # 根据行列索引
55
df.at[2,'c'] # 根据行列名称
55

指定行列区域

df.iloc[[2,3],[1,4]]
b e
2 39 3
3 54 12

以上是关于如何查看一个Datafr ame里的数据,包括用[]ilociat等方式选取数据,接下来我们来看如何用条件表达式来筛选数据:


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2023-11-22 15:47:40

第2节 4 Pandas条件查询

在pandas中,可以使用条件筛选来选择满足特定条件的数据

import pandas as pd
d =  np.array([[81, 28, 24, 25, 96],
       [ 8, 35, 56, 98, 39],
       [13, 39, 55, 36,  3],
       [70, 54, 69, 48, 12],
       [63, 80, 97, 25, 70]])
df = pd.Datafr ame(data = d,
                  columns=list('abcde'))
df
a b c d e
0 81 28 24 25 96
1 8 35 56 98 39
2 13 39 55 36 3
3 70 54 69 48 12
4 63 80 97 25 70
# 单一条件
df[df['a']>60]
df.loc[df['a']>60]
a b c d e
0 81 28 24 25 96
3 70 54 69 48 12
4 63 80 97 25 70
# 单一条件&多列
df.loc[(df['a']>60) ,['a','b','d']]
a b d
0 81 28 25
3 70 54 48
4 63 80 25
# 多条件
df[(df['a']>60) & (df['b']>60)]
a b c d e
4 63 80 97 25 70
# 多条件 筛选行 & 指定列筛选列
df.loc[(df['a']>60) & (df['b']>60) ,['a','b','d']]
a b d
4 63 80 25

以上是使用条件筛选来选取数据 ,接下来我们来看如何对数据进行数学计算


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2023-11-22 15:51:06

第2节 5 Pandas数学计算

import pandas as pd
d =  np.array([[81, 28, 24, 25, 96],
       [ 8, 35, 56, 98, 39],
       [13, 39, 55, 36,  3],
       [70, 54, 69, 48, 12],
       [63, 80, 97, 25, 70]])
df = pd.Datafr ame(data = d,
                  columns=list('abcde'))
df
a b c d e
0 81 28 24 25 96
1 8 35 56 98 39
2 13 39 55 36 3
3 70 54 69 48 12
4 63 80 97 25 70

聚合计算

聚合计算是指对数据进行汇总和统计的操作。常用的聚合计算方法包括计算均值、求和、最大值、最小值、计数等。

df['a'].mean()
47.0
df['a'].sum()
235
df['a'].max()
81
df['a'].min()
8
df['a'].count()
5
df['a'].median() # 中位数
63.0
df['a'].var() #方差
1154.5
df['a'].skew() # 偏度
-0.45733193928530436
df['a'].kurt() # 峰度
-2.9999915595685325
df['a'].cumsum() # 累计求和
0     81
1     89
2    102
3    172
4    235
Name: a, dtype: int64
df['a'].cumprod() # 累计求积
0          81
1         648
2        8424
3      589680
4    37149840
Name: a, dtype: int64
df['a'].diff() # 差分
0     NaN
1   -73.0
2     5.0
3    57.0
4    -7.0
Name: a, dtype: float64
df['a'].mad() # 平均绝对偏差
29.2

按行、列聚合计算

df.sum(axis=0)  # 按列求和汇总到最后一行
a    235
b    236
c    301
d    232
e    220
dtype: int64
df.sum(axis=1)  # 按行求和汇总到最后一列 
0    254
1    236
2    146
3    253
4    335
dtype: int64
df.describe() # 描述性统计
a b c d e
count 5.000000 5.000000 5.000000 5.000000 5.000000
mean 47.000000 47.200000 60.200000 46.400000 44.000000
std 33.977934 20.656718 26.395075 30.369392 39.083244
min 8.000000 28.000000 24.000000 25.000000 3.000000
25% 13.000000 35.000000 55.000000 25.000000 12.000000
50% 63.000000 39.000000 56.000000 36.000000 39.000000
75% 70.000000 54.000000 69.000000 48.000000 70.000000
max 81.000000 80.000000 97.000000 98.000000 96.000000

agg函数

对整个Datafr ame批量使用多个聚合函数

df.agg(['sum', 'mean','max','min','median'])
a b c d e
sum 235.0 236.0 301.0 232.0 220.0
mean 47.0 47.2 60.2 46.4 44.0
max 81.0 80.0 97.0 98.0 96.0
min 8.0 28.0 24.0 25.0 3.0
median 63.0 39.0 56.0 36.0 39.0

对Datafr amed的某些列应用不同的聚合函数

df.agg({'a':['max','min'],'b':['sum','mean'],'c':['median']})
a b c
max 81.0 NaN NaN
min 8.0 NaN NaN
sum NaN 236.0 NaN
mean NaN 47.2 NaN
median NaN NaN 56.0

apply、applymap、map函数

在Python中如果想要对数据使用函数,可以借助apply(),applymap(),map()对数据进行转换,括号里面可以是直接函数式,或者自定义函数(def)或者匿名函数(lambad)

1、当我们要对数据框(Datafr ame)的数据进行按行或按列操作时用apply()

df.apply(lambda x :x.max()-x.min(),axis=1)
#axis=1,表示按行对数据进行操作
#从下面的结果可以看出,我们使用了apply函数之后,系统自动按行找最大值和最小值计算,每一行输出一个值
0    72
1    90
2    52
3    58
4    72
dtype: int64
df.apply(lambda x :x.max()-x.min(),axis=0)
#默认参数axis=0,表示按列对数据进行操作
#从下面的结果可以看出,我们使用了apply函数之后,系统自动按列找最大值和最小值计算,每一列输出一个值
a    73
b    52
c    73
d    73
e    93
dtype: int64

2、当我们要对数据框(Datafr ame)的每一个数据进行操作时用applymap(),返回结果是Datafr ame格式

df.applymap(lambda x : 1 if x>60 else 0)
#从下面的结果可以看出,我们使用了applymap函数之后,
#系统自动对每一个数据进行判断,判断之后输出结果
a b c d e
0 1 0 0 0 1
1 0 0 0 1 0
2 0 0 0 0 0
3 1 0 1 0 0
4 1 1 1 0 1

3、当我们要对Series的每一个数据进行操作时用map()

df['a'].map(lambda x : 1 if x>60 else 0)
0    1
1    0
2    0
3    1
4    1
Name: a, dtype: int64

总结:

apply() 函数可以在Datafr ame或Series上应用自定义函数,可以在行或列上进行操作。

applymap() 函数只适用于Datafr ame,可以在每个元素上应用自定义函数。

map() 函数只适用于Series,用于将每个元素映射到另一个值。

以上是数学运算部分,包括聚合计算、批量应用聚合函数,以及对Series和Datafr ame进行批量映射,接下来我们来看如何对数据进行合并拼接


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群