基于Python的数据清洗常用工具
原创
©著作权归作者所有:来自51CTO博客作者Mr.郑先生_的原创作品,请联系作者获取转载授权,否则将追究法律责任
基于Python的数据清洗常用工具
- Python数据清洗实战入门之数据清洗的常用工具
- 一、数组运算库Numpy
- 创建一维数组
- 通过嵌套列表创建二维数组
- 使用Numpy的迭代器生成数组
- 简单数组运算
- 判断数组属性
- 将元组转换成数组
- 获取数组内元素
- 一维数组排序
- 二维数组排序
- 数据搜索
- 创建序列结构
- 给序列创建索引
- 通过键值对创建序列
- 访问序列内元素
- Pandas常用数据结构——DataFrame
- 通过嵌套列表创建数据表
- 通过字典创建数据表
- 通过数组创建数据表
- 输出数据表及其属性
Python数据清洗实战入门之数据清洗的常用工具
目前的机器学习、深度学习都是以数据为基础,数据处理是最开始也是最关键的环节,数据的好坏决定着模型的效果,本文整理了2个常用的数据清洗工具(Numpy和Pandas)
一、数组运算库Numpy
NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
NumPy 通常与 Matplotlib(绘图库)一起使用,用于绘制训练的损失曲线,如下图所示:
Numpy常用数据结构
创建一维数组
# 创建一维数组
import numpy as np
arr = np.array([-9, 1, 2, 5], dtype=float) # dtype参数可设置数据类型,如浮点型、整型、字符型等
type(arr) # 查看arr的类型
arr # 输出arr数组
通过嵌套列表创建二维数组
# 通过嵌套列表创建二维数组
import numpy as np
arr = np.array([[1, 2, 3, 4], [-9, 1, 2, 5], [8, 9, 10, 11]])
arr # 输出arr数组
array([[ 1, 2, 3, 4],
[-9, 1, 2, 5],
[ 8, 9, 10, 11]])
使用Numpy的迭代器生成数组
# 使用Numpy的迭代器生成数组
import numpy as np
np.arange(1, 10, 0.8) # 三个参数分别是起始值、终止值和步长(注意:[起始值,终止值) )
array([1. , 1.8, 2.6, 3.4, 4.2, 5. , 5.8, 6.6, 7.4, 8.2, 9. , 9.8])
# 产生等差数组
import numpy as np
np.linspace(1, 10, 10, endpoint=True) # 三个参数分别是起始值、终止值和元素个数以及是否包含终止值
array([ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.])
# 产生全零数组
import numpy as np
# np.zeros(3) # 一维数组
np.zeros([4, 5]) # [行, 列]
array([[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]])
# 产生全一数组
import numpy as np
# np.ones(3) # 一维数组
np.ones([4, 5]) # [行, 列]
array([[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.]])
简单数组运算
# 数组可以直接做运算
import numpy as np
arr = np.ones([4, 5])
arr + 1.2
array([[2.2, 2.2, 2.2, 2.2, 2.2],
[2.2, 2.2, 2.2, 2.2, 2.2],
[2.2, 2.2, 2.2, 2.2, 2.2],
[2.2, 2.2, 2.2, 2.2, 2.2]])
判断数组属性
# 判断数组维度
import numpy as np
arr = np.ones([4, 5])
arr.ndim
# 判断数组形状(几行几列)
import numpy as np
arr = np.ones([4, 5])
arr.shape
# 判断数组里有多少个元素
import numpy as np
arr = np.ones([4, 5])
arr.size
# 判断数组内元素的数据类型
import numpy as np
arr = np.ones([4, 5])
arr.dtype
将元组转换成数组
# 将元组转换成数组
import numpy as np
data = ((1, 2, 3, 4), (5.1, 6, 7.0, 8), (0.8, 9, 10, 11))
arr = np.array(data)
arr
array([[ 1. , 2. , 3. , 4. ],
[ 5.1, 6. , 7. , 8. ],
[ 0.8, 9. , 10. , 11. ]])
获取数组内元素
# 获取数组内元素
import numpy as np
data = ((1, 2, 3, 4), (5.1, 6, 7.0, 8), (0.8, 9, 10, 11))
arr = np.array(data)
arr[0] # 获取数组第一行的元素
arr[0:2] # 获取数组第0~1行的元素
arr[:, 1:4] # 获取数组第2~4列的元素
arr[1, 2] # 获取数组第2行第3列的元素
Numpy常用数据清洗函数
一维数组排序
# 对数据进行从小到大排序
import numpy as np
arr = np.array([1, 6, 3, 9, 7, 2, 10, 8, 5, 4])
np.sort(arr) # 从小到大排序,此时arr内的数据未改变
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
# 对数据进行从大到小排序
import numpy as np
arr = np.array([1, 6, 3, 9, 7, 2, 10, 8, 5, 4])
sorted(arr, reverse=True) # 使用Python内置函数进行倒序排序
np.array(sorted(arr, reverse=True)) # 将排序结果转换成数组
array([10, 9, 8, 7, 6, 5, 4, 3, 2, 1])
# 获取数据进行从小到大排序的索引值
import numpy as np
arr = np.array([1, 6, 3, 9, 7, 2, 10, 8, 5, 4])
np.argsort(arr) # 返回排序后的数组索引
array([0, 5, 2, 9, 8, 1, 4, 7, 3, 6])
二维数组排序
# 对数据进行从小到大排序
import numpy as np
arr = np.array([[1, 6, 3], [9, 7, 2], [10, 8, 5]])
np.sort(arr) # 默认沿着列从小到大排序
np.sort(arr, axis=0) # 沿着行从小到大排序
array([[ 1, 6, 2],
[ 9, 7, 3],
[10, 8, 5]])
数据搜索
# 数据搜索
import numpy as np
arr = np.array([[-1, 6, 3], [9, -7, 2], [10, 8, 5]])
np.where(arr>3, 1, -1) # 三个参数分别为条件、条件满足时的返回值、条件不满足时的返回值
np.where(arr>3, arr, -1) # 满足条件时返回数组本身
array([[-1, 6, -1],
[ 9, -1, -1],
[10, 8, 5]])
# 取出符合条件的元素
import numpy as np
arr = np.array([[-1, 6, 3], [9, -7, 2], [10, 8, 5]])
np.extract(arr>3, arr) # 两个参数分别是条件和条件符合时返回的值
二、数据分析库Pandas
pandas是基于NumPy的一种工具,该工具是一种快速,强大,灵活且易于使用的开源数据分析和处理工具
Pandas常用数据结构——Series
通过pandas.Series来创建Series数据结构:
pandas.Series(data, index, dtype, name)
- data可以为列表, array或者dict
- index表示索引,必须与数据同长度
- name代表对象的名称
创建序列结构
# 创建序列结构
import pandas as pd
series = pd.Series([2.8, 3.01, 8, 13.0, 1])
type(series)
series
0 2.80
1 3.01
2 8.00
3 13.00
4 1.00
dtype: float64
给序列创建索引
# 给序列创建索引
import pandas as pd
series = pd.Series([2.8, 3.01, 8, 13.0, 1], index=['a', 'b', 'c', 'e', 'f'], name="author: 郑博培")
series
a 2.80
b 3.01
c 8.00
e 13.00
f 1.00
Name: author: 郑博培, dtype: float64
通过键值对创建序列
# 通过键值对创建序列
import pandas as pd
series = pd.Series({'北京':2.8, '上海':3.0, '广东':2.7})
series
北京 2.8
上海 3.0
广东 2.7
dtype: float64
访问序列内元素
# 访问序列内元素
import pandas as pd
series = pd.Series({'北京':2.8, '上海':3.0, '广东':2.7})
series[0:2] # 通过索引访问
series['北京':'广东'] # 通过标签访问
series.values # 输出值
series.index # 输出索引
Index(['北京', '上海', '广东'], dtype='object')
Pandas常用数据结构——DataFrame
通过pandas.DataFrame来创建DataFrame数据结构:
pandas. DataFrame(data,index,dtype,columns)
- data可以为列表, array或者dict
- index表示行索引
- columns代表列名或者列标签
通过嵌套列表创建数据表
# 通过嵌套列表创建数据表
import pandas as pd
List = [['Marry', 23, 'F'], ['Tony', 27, 'M'], ['Luccy', 16, 'F']]
pd.DataFrame(List, columns=['name', 'age', 'sex']) # 使用columns设置列标签
| name
| age
| sex
|
0
| Marry
| 23
| F
|
1
| Tony
| 27
| M
|
2
| Luccy
| 16
| F
|
通过字典创建数据表
# 通过字典创建数据表
import pandas as pd
Dict = {'name':['Marry', 'Tony', 'Luccy'], 'age':[23, 27, 16], 'sex':['F', 'M', 'F']}
pd.DataFrame(Dict)
| name
| age
| sex
|
0
| Marry
| 23
| F
|
1
| Tony
| 27
| M
|
2
| Luccy
| 16
| F
|
通过数组创建数据表
# 通过数组创建数据表
import numpy as np
import pandas as pd
array = np.array([['Marry', 23, 'F'], ['Tony', 27, 'M'], ['Luccy', 16, 'F']])
pd.DataFrame(array, columns=['name', 'age', 'sex'], index=['a', 'b', 'c'])
| name
| age
| sex
|
a
| Marry
| 23
| F
|
b
| Tony
| 27
| M
|
c
| Luccy
| 16
| F
|
输出数据表及其属性
# 输出数据表
import pandas as pd
Data = pd.DataFrame({'name':['Marry', 'Tony', 'Luccy'], 'age':[23, 27, 16], 'sex':['F', 'M', 'F']})
Data.values
array([['Marry', 23, 'F'],
['Tony', 27, 'M'],
['Luccy', 16, 'F']], dtype=object)
# 输出数据表行索引
import pandas as pd
Data = pd.DataFrame({'name':['Marry', 'Tony', 'Luccy'], 'age':[23, 27, 16], 'sex':['F', 'M', 'F']})
Data.index
RangeIndex(start=0, stop=3, step=1)
# 输出数据表列标签
import pandas as pd
Data = pd.DataFrame({'name':['Marry', 'Tony', 'Luccy'], 'age':[23, 27, 16], 'sex':['F', 'M', 'F']})
Data.columns
andas as pd
Data = pd.DataFrame({'name':['Marry', 'Tony', 'Luccy'], 'age':[23, 27, 16], 'sex':['F', 'M', 'F']})
Data.columns
Data.columns.tolist() # 把对象转换成列表
请点击此处查看本环境基本用法.
Please click here for more detailed instructions.