1. Pandas简介
Pandas是一个开源的,BSD许可的库,为Python编程语言提供高性能,易于使用的数据结构和数据分析工具。
2. Series用法
Pandas提供了两种最重要的数据结构类型,Series(一维)和DataFrame(二维),我们今天先来介绍Series。
Series 是一组带索引数组,即由一组数据和与之相关的索引组成的一维数据对象。与list以及numpy中array相似,但list中元素可以为不同数据类型,而另外两者只能为相同数据类型。
2.1 如何创建Series
- 通过列表
list
创建Series
- 通过指定
index
关键字的方式创建带有自定义索引的Series
- 通过array创建
Series
- 通过字典
dict
创建Series
import pandas as pd
import numpy as np
s1 = pd.Series([10, 40, 5, 90, 35, 40])
print(s1)
# 0 10
# 1 40
# 2 5
# 3 90
# 4 35
# 5 40
# dtype: int64
s2 = pd.Series([100, 79, 65, 77], index=["chinese", "english", "history", "maths"], name='score')
# chinese 100
# english 79
# history 65
# maths 77
# Name: score, dtype: int64
s3 = pd.Series(np.linspace(start=0, stop=5, num=5))
print(s3)
# 0 0.00
# 1 1.25
# 2 2.50
# 3 3.75
# 4 5.00
# dtype: float64
s4 = pd.Series(np.arange(10, 15))
print(s4)
# 0 10
# 1 11
# 2 12
# 3 13
# 4 14
# dtype: int32
d1 = pd.Series({"name": "张三", "Gender": "男", "age": 20, "height": 180, "weight": 66})
# name 张三
# Gender 男
# age 20
# height 180
# weight 66
# dtype: object
2.2 如何获取Series的属性
index
索引values
值name
名字dtype
类型
print(s1.index)
# RangeIndex(start=0, stop=6, step=1)
print(s1.values)
# [10 40 5 90 35 40]
print(s1.name)
# None
print(s1.dtype)
# int64
print(s2.index)
# Index(['chinese', 'english', 'history', 'maths'], dtype='object')
print(s2.values)
# [100 79 65 77]
2.3 如何获取数据
- 通过位置获取数据
- 通过索引获取数据
print(s1[0])
# 10
# 获取值
print(s1[0:2])
# 0 10
# 1 40
# dtype: int64
print(s1[[0, 1, 2]])
# 0 10
# 1 40
# 2 5
# dtype: int64
s2["chinese"]
# 100
s2[["english", "history"]]
# english 79
# history 65
# dtype: int64
print(s2[s2.values > 70])
# chinese 100
# english 79
# maths 77
# Name: score, dtype: int64
print(s2[s2.index != 'chinese'])
# english 79
# history 65
# maths 77
# Name: score, dtype: int64
d1["name"]
# 张三
d1[["name", "height", "weight"]]
# name 张三
# height 180
# weight 66
# dtype: object
2.4 基本运算
查看描述性统计数据
print(s1.values)
# [10 40 5 90 35 40]
print(s1.describe())
# count 6.000000
# mean 36.666667
# std 30.276504
# min 5.000000
# 25% 16.250000
# 50% 37.500000
# 75% 40.000000
# max 90.000000
# dtype: float64
print(s1.mean()) #均值
# 36.666666666666664
print(s1.median()) #中位数
# 37.5
print(s1.sum()) #求和
# 220
print(s1.std()) #标准差
# 30.276503540974915
print(s1.mode()) #众数
# 0 40
# dtype: int64
print(s1.value_counts()) #每个值的数量
# 40 2
# 35 1
# 5 1
# 90 1
# 10 1
# dtype: int64
数学运算
import numpy as np
print(s1.values)
# [10 40 5 90 35 40]
print(s1 / 2) #对每个值除2
# 0 5.0
# 1 20.0
# 2 2.5
# 3 45.0
# 4 17.5
# 5 20.0
# dtype: float64
print(s1 // 2) #对每个值除2后取整
# 0 5
# 1 20
# 2 2
# 3 45
# 4 17
# 5 20
# dtype: int64
print(s1 % 2) #取余
# 0 0
# 1 0
# 2 1
# 3 0
# 4 1
# 5 0
# dtype: int64
print(s1 ** 2) #求平方
# 0 100
# 1 1600
# 2 25
# 3 8100
# 4 1225
# 5 1600
# dtype: int64
print(np.sqrt(s1)) #求开方
# 0 3.162278
# # 1 6.324555
# # 2 2.236068
# # 3 9.486833
# # 4 5.916080
# # 5 6.324555
# # dtype: float64
print(np.log(s1)) #求对数
# 0 2.302585
# 1 3.688879
# 2 1.609438
# 3 4.499810
# 4 3.555348
# 5 3.688879
# dtype: float64
对齐计算
d2 = pd.Series({'a': 10, 'b': 40, 'c': 5, 'd': 90, 'e': 35, 'f': 40}, name='数值')
d3 = pd.Series({'a': 10, 'b': 20, 'd': 23, 'g': 90, 'h': 35, 'i': 40}, name='数值')
d4 = d2 + d3
print(d4)
# a 20.0
# b 60.0
# c NaN
# d 113.0
# e NaN
# f NaN
# g NaN
# h NaN
# i NaN
# Name: 数值, dtype: float64
2.5 缺失值处理
notnull()
找空值isnull()
找非空值fillna()
填充空值
print(d4[d4.notnull()])
# a 20.0
# b 60.0
# d 113.0
# Name: 数值, dtype: float64
print(d4[d4.isnull()])
# c NaN
# e NaN
# f NaN
# g NaN
# h NaN
# i NaN
# Name: 数值, dtype: float64
d4=d4.fillna(d4.median())
print(d4)
# a 20.0
# b 60.0
# c 60.0
# d 113.0
# e 60.0
# f 60.0
# g 60.0
# h 60.0
# i 60.0
# Name: 数值, dtype: float64
2.6 删除值
print(d4.drop('b'))
# a 20.0
# c 60.0
# d 113.0
# e 60.0
# f 60.0
# g 60.0
# h 60.0
# i 60.0
# Name: 数值, dtype: float64
参考文献
- https://blog.csdn.net/MsSpark/article/details/83050261
- https://tianchi.aliyun.com/course/courseConsole?spm=5176.12282070.0.0.2c372042hvOdQn&courseId=41138&chapterIndex=4§ionIndex=1
往期活动
LSGO软件技术团队会定期开展提升编程技能的刻意练习活动,希望大家能够参与进来一起刻意练习,一起学习进步!
- 我是如何组织“算法刻意练习活动”的?
- Day01 两数相加
- Day02 寻找两个有序数组的中位数
- Day03 最长回文子串
- Day04 整数反转
- Day05 字符串转换整数 (atoi)
- Day06 回文数
- Day07 盛最多水的容器
- Day08 最长公共前缀
- Day09 三数之和
- Day10 最接近的三数之和
- Day11 有效的括号
- Day12 合并两个有序链表
- Day13 合并K个排序链表
- Day14 删除排序数组中的重复项
- Day15 搜索旋转排序数组
- Day16 字符串相乘
- Day17 全排列
- Day18 最大子序和
- Day19 螺旋矩阵
- Day20 螺旋矩阵 II
- Day21 旋转链表
- Day22 不同路径
- Day23 爬楼梯
- Day24 子集
- Day25 合并两个有序数组
- Day26 格雷编码
- Day27 二叉树的最大深度
- Day28 买卖股票的最佳时机
- Day29 买卖股票的最佳时机 II
- Day30 二叉树中的最大路径和
- Day31 只出现一次的数字
- Day32 环形链表
- Day33 环形链表 II
- Day34 LRU缓存机制
- Day35 排序链表
- Day36 最小栈
- Day37 相交链表
- Day38 求众数
- Day39 反转链表
- Day40 数组中的第K个最大元素
- Day41 存在重复元素
- Day42 二叉搜索树中第K小的元素
- Day43 2的幂
- Day44 二叉搜索树的最近公共祖先
- Day45 二叉树的最近公共祖先
- Day46 删除链表中的节点
- Day47 除自身以外数组的乘积
- Day48 Nim 游戏
- Day49 反转字符串
- Day50 反转字符串中的单词 III
我是 终身学习者“老马”,一个长期践行“结伴式学习”理念的 中年大叔。
我崇尚分享,渴望成长,于2010年创立了“LSGO软件技术团队”,并加入了国内著名的开源组织“Datawhale”,也是“Dre@mtech”、“智能机器人研究中心”和“大数据与哲学社会科学实验室”的一员。
愿我们一起学习,一起进步,相互陪伴,共同成长。
后台回复「搜搜搜」,随机获取电子资源!
欢迎关注,请扫描二维码: