Pandas数据分析的一些常用小技巧


Posted in Python onFebruary 07, 2021

Pandas小技巧

import pandas as pd

pandas生成数据

d = {"sex": ["male", "female", "male", "female"],
 "color": ["red", "green", "blue", "yellow"],
 "age": [12, 56, 21, 31]}
df = pd.DataFrame(d)
df

sex color age
0 male red 12
1 female green 56
2 male blue 21
3 female yellow 31

数据替换?map映射

map() 会根据提供的函数对指定序列做映射。

map(function, iterable, …)

  • function ? 函数
  • iterable ? 一个或多个序列
d = {"male": 1, "female": 0}
df["gender"] = df["sex"].map(d)
df

sex color age gender
0 male red 12 1
1 female green 56 0
2 male blue 21 1
3 female yellow 31 0

数据清洗?replace和正则

分享pandas数据清洗技巧,在某列山使用replace和正则快速完成值的清洗

d = {"customer": ["A", "B", "C", "D"],
 "sales": [1000, "950.5RMB", "$400", "$1250.75"]}
df = pd.DataFrame(d)
df

customer sales
0 A 1000
1 B 950.5RMB
2 C $400
3 D $1250.75

sales列的数据类型不同意,为后续分析,所以需要将他的格式同统一

df["sales"] = df["sales"].replace("[$,RMB]", "", regex=True).astype("float")
df

customer sales
0 A 1000.00
1 B 950.50
2 C 400.00
3 D 1250.75

查看数据类型

df["sales"].apply(type)

0    <class 'float'>
1    <class 'float'>
2    <class 'float'>
3    <class 'float'>
Name: sales, dtype: object

数据透视表分析?melt函数

melt是逆转操作函数,可以将列名转换为列数据(columns name → column values),重构DataFrame,用法如下:

参数说明:

pandas.melt(frame, id_vars=None, value_vars=None, var_name=None, value_name=‘value', col_level=None)

  • frame:要处理的数据集。
  • id_vars:不需要被转换的列名。
  • value_vars:需要转换的列名,如果剩下的列全部都要转换,就不用写了。
  • var_name和value_name是自定义设置对应的列名。
  • col_level :如果列是MultiIndex,则使用此级别。

二维表格转成一维表格

d = {"district_code": [12345, 56789, 101112, 131415],
 "apple": [5.2, 2.4, 4.2, 3.6],
 "banana": [3.5, 1.9, 4.0, 2.3],
 "orange": [8.0, 7.5, 6.4, 3.9]
 }
df = pd.DataFrame(d)
df

district_code apple banana orange
0 12345 5.2 3.5 8.0
1 56789 2.4 1.9 7.5
2 101112 4.2 4.0 6.4
3 131415 3.6 2.3 3.9
df = df.melt(id_vars="district_code",
  var_name="fruit_name",
  value_name="price")
df

district_code fruit_name price
0 12345 apple 5.2
1 56789 apple 2.4
2 101112 apple 4.2
3 131415 apple 3.6
4 12345 banana 3.5
5 56789 banana 1.9
6 101112 banana 4.0
7 131415 banana 2.3
8 12345 orange 8.0
9 56789 orange 7.5
10 101112 orange 6.4
11 131415 orange 3.9

将分类中出现次数较少的值归为others

d = {"name": ['Jone', 'Alica', 'Emily', 'Robert', 'Tomas',
  'Zhang', 'Liu', 'Wang', 'Jack', 'Wsx', 'Guo'],
 "categories": ["A", "C", "A", "D", "A",
   "B", "B", "C", "A", "E", "F"]}
df = pd.DataFrame(d)
df

name categories
0 Jone A
1 Alica C
2 Emily A
3 Robert D
4 Tomas A
5 Zhang B
6 Liu B
7 Wang C
8 Jack A
9 Wsx E
10 Guo F

D、E、F 仅在分类中出现一次,A 出现次数较多。

统计出现次数,并标准化

frequencies = df["categories"].value_counts(normalize=True)
frequencies

A    0.363636
B    0.181818
C    0.181818
E    0.090909
D    0.090909
F    0.090909
Name: categories, dtype: float64

设定阈值

threshold = 0.1
small_categories = frequencies[frequencies < threshold].index
small_categories
Index(['E', 'D', 'F'], dtype='object')

替换

df["categories"] = df["categories"].replace(small_categories, "Others")
df

name categories
0 Jone A
1 Alica C
2 Emily A
3 Robert Others
4 Tomas A
5 Zhang B
6 Liu B
7 Wang C
8 Jack A
9 Wsx Others
10 Guo Others

Python小技巧

列表推导式

例如,假设我们想创建一个正方形列表,例如

squares = []
for x in range(10):
 squares.append(x**2)
squares

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

squares = list(map(lambda x: x**2, range(10)))
squares

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

squares = [x**2 for x in range(10)]
squares

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

同时还可以利用if来过滤列表

[(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]

[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]

列表推导式可以包含复杂表达式和嵌套函数

from math import pi
[str(round(pi, i)) for i in range(1, 6)]

['3.1', '3.14', '3.142', '3.1416', '3.14159']

列表推导式中的初始表达式可以是任意表达式,包括另一个列表推导式。

下面的列表推导式将对行和列进行转置

matrix = [
 [1, 2, 3, 4],
 [5, 6, 7, 8],
 [9, 10, 11, 12],
]
[[row[i] for row in matrix] for i in range(4)]

[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

交换变量

a = 1
b = 2
a, b = b, a
print("a = ",a)
print("b = ",b)

a =  2
b =  1

检查对象使用内存情况

sys.getsizeof()

range()函数返回的是一个类,在使用内存方面,range远比实际的数字列表更加高效

import sys
mylist = range(1,10000)
print(sys.getsizeof(mylist))

48

合并字典

从Python3.5开始,合并字典的操作更加简单

如果key重复,那么第一个字典的key会被覆盖

d1 ={"a":1,"b":2}
d2 = {"b":2,"c":4}
m = {**d1,**d2}
print(m)

{'a': 1, 'b': 2, 'c': 4}

字符串分割成列表

string = "the author is beishanla"
s = string.split(" ")
s

['the', 'author', 'is', 'beishanla']

字符串列表创建字符串

l = ["the","author","is","beishanla"]
l = " ".join(l)
l

'the author is beishanla'

Python查看图片

pip install Pillow
from PIL import Image
im = Image.open("E:/Python/00网络爬虫/Project/词云图跳舞视频/aip-python-sdk-4.15.1/pictures/img_88.jpg")
im.show()
print(im.format,im.size,im.mode)

JPEG (1920, 1080) RGB

欢迎搜藏,持续更新

总结

到此这篇关于Pandas数据分析的一些常用小技巧的文章就介绍到这了,更多相关Pandas数据分析技巧内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
使用python编写批量卸载手机中安装的android应用脚本
Jul 21 Python
Python操作串口的方法
Jun 17 Python
Python+Socket实现基于UDP协议的局域网广播功能示例
Aug 31 Python
django在接受post请求时显示403forbidden实例解析
Jan 25 Python
python实现文本进度条 程序进度条 加载进度条 单行刷新功能
Jul 03 Python
python logging 日志的级别调整方式
Feb 21 Python
找Python安装目录,设置环境路径以及在命令行运行python脚本实例
Mar 09 Python
python进行OpenCV实战之画图(直线、矩形、圆形)
Aug 27 Python
python能做哪些生活有趣的事情
Sep 09 Python
Python利用imshow制作自定义渐变填充柱状图(colorbar)
Dec 10 Python
一文搞懂如何实现Go 超时控制
Mar 30 Python
OpenCV-Python实现轮廓拟合
Jun 08 Python
使用python tkinter开发一个爬取B站直播弹幕工具的实现代码
Feb 07 #Python
python实现经典排序算法的示例代码
Feb 07 #Python
Python自动化测试基础必备知识点总结
Feb 07 #Python
10张动图学会python循环与递归问题
Feb 06 #Python
PyCharm 光标变成黑块的解决方式
Feb 06 #Python
使用Python下载抖音各大V视频的思路详解
Feb 06 #Python
python wsgiref源码解析
Feb 06 #Python
You might like
PHP中使用sleep造成mysql读取失败的案例和解决方法
2014/08/21 PHP
PHP的Yii框架中行为的定义与绑定方法讲解
2016/03/18 PHP
Yii2 RESTful中api的使用及开发实例详解
2016/07/06 PHP
浅谈PHP中关于foreach使用引用变量的坑
2016/11/14 PHP
PHP中字符串长度的截取用法示例
2017/01/12 PHP
thinkphp5 + ajax 使用formdata提交数据(包括文件上传) 后台返回json完整实例
2020/03/02 PHP
JavaScript Perfection kill 测试及答案
2010/03/23 Javascript
Jquery弹出窗口插件 LeanModal的使用方法
2012/03/10 Javascript
JavaScript中的this关键字介绍与使用实例
2013/06/21 Javascript
jquery实现图片裁剪思路及实现
2013/08/16 Javascript
JS实现让访问者自助选择网页文字颜色的方法
2015/02/24 Javascript
jQuery实现文本展开收缩特效
2015/06/03 Javascript
jquery插件uploadify实现带进度条的文件批量上传
2015/12/13 Javascript
JS实现汉字与Unicode码相互转换的方法详解
2017/04/28 Javascript
jQuery异步提交表单实例
2017/05/30 jQuery
动态统计当前输入内容的字节、字符数的实例详解
2017/10/27 Javascript
ES6中Class类的静态方法实例小结
2017/10/28 Javascript
彻底弄懂 JavaScript 执行机制
2018/10/23 Javascript
vue data对象重新赋值无效(未更改)的解决方式
2020/07/24 Javascript
python模拟登陆Tom邮箱示例分享
2014/01/13 Python
python开发中range()函数用法实例分析
2015/11/12 Python
深入理解NumPy简明教程---数组2
2016/12/17 Python
不管你的Python报什么错,用这个模块就能正常运行
2018/09/14 Python
快速排序的四种python实现(推荐)
2019/04/03 Python
解决Python pip 自动更新升级失败的问题
2020/02/21 Python
pycharm下pyqt4安装及环境配置的教程
2020/04/24 Python
浅谈如何使用python抓取网页中的动态数据实现
2020/08/17 Python
美国在线和移动免费会员制批发零售商:Boxed(移动端的Costco)
2020/01/02 全球购物
优秀员工个人的自我评价
2013/11/29 职场文书
2014新年元旦活动策划方案
2014/02/18 职场文书
开学典礼策划方案
2014/05/28 职场文书
个人工作总结范文2014
2014/11/07 职场文书
2014年护士个人工作总结
2014/11/11 职场文书
签证工作证明模板
2015/06/15 职场文书
python获取对象信息的实例详解
2021/07/07 Python
Python pyecharts绘制条形图详解
2022/04/02 Python