基于Python的数据清洗常用工具

  • ​​Python数据清洗实战入门之数据清洗的常用工具​​
  • ​​一、数组运算库Numpy​​
  • ​​Numpy常用数据结构​​
  • ​​创建一维数组​​
  • ​​通过嵌套列表创建二维数组​​
  • ​​使用Numpy的迭代器生成数组​​
  • ​​简单数组运算​​
  • ​​判断数组属性​​
  • ​​将元组转换成数组​​
  • ​​获取数组内元素​​
  • ​​Numpy常用数据清洗函数​​
  • ​​一维数组排序​​
  • ​​二维数组排序​​
  • ​​数据搜索​​
  • ​​二、数据分析库Pandas​​
  • ​​Pandas常用数据结构——Series​​
  • ​​创建序列结构​​
  • ​​给序列创建索引​​
  • ​​通过键值对创建序列​​
  • ​​访问序列内元素​​
  • ​​Pandas常用数据结构——DataFrame​​
  • ​​通过嵌套列表创建数据表​​
  • ​​通过字典创建数据表​​
  • ​​通过数组创建数据表​​
  • ​​输出数据表及其属性​​

Python数据清洗实战入门之数据清洗的常用工具

目前的机器学习、深度学习都是以数据为基础,数据处理是最开始也是最关键的环节,数据的好坏决定着模型的效果,本文整理了2个常用的数据清洗工具(Numpy和Pandas)

一、数组运算库Numpy

NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。

NumPy 通常与 Matplotlib(绘图库)一起使用,用于绘制训练的损失曲线,如下图所示:


基于Python的数据清洗常用工具_数据处理

Numpy常用数据结构

创建一维数组

# 创建一维数组
import numpy as np

arr = np.array([-9, 1, 2, 5], dtype=float) # dtype参数可设置数据类型,如浮点型、整型、字符型等
type(arr) # 查看arr的类型
arr # 输出arr数组
array([-9.,  1.,  2.,  5.])

通过嵌套列表创建二维数组

# 通过嵌套列表创建二维数组
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
2
# 判断数组形状(几行几列)
import numpy as np

arr = np.ones([4, 5])
arr.shape
(4, 5)
# 判断数组里有多少个元素
import numpy as np

arr = np.ones([4, 5])
arr.size
20
# 判断数组内元素的数据类型
import numpy as np

arr = np.ones([4, 5])
arr.dtype
dtype('float64')

将元组转换成数组

# 将元组转换成数组
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列的元素
7.0

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) # 两个参数分别是条件和条件符合时返回的值
array([ 6,  9, 10,  8,  5])

二、数据分析库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() # 把对象转换成列表
['name', 'age', 'sex']

请点击​​此处​​​查看本环境基本用法.

Please click ​​​here ​​ for more detailed instructions.