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查找相似单词的方法
Mar 05 Python
python里使用正则的findall函数的实例详解
Oct 19 Python
python利用有道翻译实现&quot;语言翻译器&quot;的功能实例
Nov 14 Python
Python实现生成随机数据插入mysql数据库的方法
Dec 25 Python
Python+matplotlib+numpy实现在不同平面的二维条形图
Jan 02 Python
python爬虫 使用真实浏览器打开网页的两种方法总结
Apr 21 Python
Python 爬虫之Beautiful Soup模块使用指南
Jul 05 Python
浅谈关于Python3中venv虚拟环境
Aug 01 Python
Python发展简史 Python来历
May 14 Python
简单了解Pandas缺失值处理方法
Nov 16 Python
Python 利用flask搭建一个共享服务器的步骤
Dec 05 Python
解决tensorflow模型压缩的问题_踩坑无数,总算搞定
Mar 02 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调用google接口生成二维码示例
2014/04/28 PHP
一个经典的PHP文件上传类分享
2014/11/18 PHP
PHP 500报错的快速解决方法
2016/12/14 PHP
PHP操作Redis常用技巧总结
2018/04/24 PHP
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
2020/02/15 PHP
JQuery 学习笔记 选择器之四
2009/07/23 Javascript
JS 跳转页面延迟2种方法
2013/03/29 Javascript
通过Jquery的Ajax方法读取将table转换为Json
2014/05/31 Javascript
PageSwitch插件实现100种不同图片切换效果
2015/07/28 Javascript
浅谈javascript的Touch事件
2015/09/27 Javascript
JavaScript jQuery 中定义数组与操作及jquery数组操作
2015/12/18 Javascript
仅9张思维导图帮你轻松学习Javascript 就这么简单
2016/06/01 Javascript
AngularJS模块详解及示例代码
2016/08/17 Javascript
详解使用grunt完成requirejs的合并压缩和js文件的版本控制
2017/03/02 Javascript
使用ionic播放轮询广告的实现方法(必看)
2017/04/24 Javascript
微信小程序使用navigateTo数据传递的实例
2017/09/26 Javascript
基于zTree树形菜单的使用实例
2017/12/25 Javascript
Vue自定义全局弹窗组件操作
2020/08/11 Javascript
vue路由结构可设一层方便动态添加路由操作
2020/08/31 Javascript
JavaScript实现H5接金币功能(实例代码)
2021/02/22 Javascript
python通过smpt发送邮件的方法
2015/04/30 Python
在Python的Django框架中simple-todo工具的简单使用
2015/05/30 Python
对Tensorflow中的变量初始化函数详解
2018/07/27 Python
python使用Plotly绘图工具绘制水平条形图
2020/03/25 Python
python excel转换csv代码实例
2019/08/26 Python
通过实例解析Python调用json模块
2019/12/11 Python
Python模块zipfile原理及使用方法详解
2020/08/04 Python
html5 Canvas画图教程(2)—画直线与设置线条的样式如颜色/端点/交汇点
2013/01/09 HTML / CSS
阿迪达斯比利时官方商城:adidas比利时
2016/10/10 全球购物
Groupon比利时官方网站:特卖和网上购物高达-70%
2019/08/09 全球购物
毕业生教师求职信
2013/10/20 职场文书
大一自我鉴定范文
2013/12/27 职场文书
医学院毕业生自荐信范文
2014/03/06 职场文书
golang中的空slice案例
2021/04/27 Golang
小程序实现侧滑删除功能
2022/06/25 Javascript
win10系统计算机图标怎么调出来?win10调出计算机图标的方法
2022/08/14 数码科技