欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python数据清洗工具、方法、过程整理归纳(一、数据清洗之常用工具——numpy,pandas)

程序员文章站 2024-01-19 15:36:34
...

1 背景

  • 数据清洗是整个数据分析过程的第一步,也是整个数据分析项目中最耗费时间的一步;
  • 数据分析的过程决定了数据分析的准确性。

2 常用工具

2.1 numpy

numpy常用数据结构:

    numpy中重用的数据结构是ndarray格式
    使用array函数创建,语法格式为array(列表或元组)
    可以使用其他函数例如arange/linspace/zeros等创建

import numpy as np
#使用array函数创建
arr1 = np.array([-7, 4, 4, 6, 89])

type(arr1)

numpy.ndarray

arr3 = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])#嵌套列表

arr3

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

np.arange(1,10,0.5)#使用arange函数

array([1. , 1.5, 2. , 2.5, 3. , 3.5, 4. , 4.5, 5. , 5.5, 6. , 6.5, 7. , 7.5, 8. , 8.5, 9. , 9.5])

np.linspace(1,10,20,endpoint = True)#使用等差数列:起始值,终止值,元素个数

array([ 1.        ,  1.47368421,  1.94736842,  2.42105263,  2.89473684,
        3.36842105,  3.84210526,  4.31578947,  4.78947368,  5.26315789,
        5.73684211,  6.21052632,  6.68421053,  7.15789474,  7.63157895,
        8.10526316,  8.57894737,  9.05263158,  9.52631579, 10.        ])

(10-1)/19

0.47368421052631576

np.zeros([4,5])#使用zeros函数

array([[0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.]])

np.zeros(4)

array([0., 0., 0., 0.])

np.ones([2,3])#使用ones函数

array([[1., 1., 1.],
       [1., 1., 1.]])

arr3 + 1#每个元素都加1

array([[ 2,  3,  4,  5],
       [ 6,  7,  8,  9],
       [10, 11, 12, 13]])

arr3.ndim#数组维度

2

arr1.shape#数组形状

(5,)#一维数组:5个元素

arr3.shape

(3, 4)#二维数组:3行4列

arr3.size#一共有多少元素

12

arr3.dtype#元素类型

dtype('int32')#使用元组
data2 = ((1.2,2.3,3,4,5.6),(4.5,6.7,34,3.6,5),(2.5,4.6,7.8,8.9,50))#嵌套元组

data2

((1.2, 2.3, 3, 4, 5.6), (4.5, 6.7, 34, 3.6, 5), (2.5, 4.6, 7.8, 8.9, 50))

arr2 = np.array(data2)

arr2

array([[ 1.2,  2.3,  3. ,  4. ,  5.6],
       [ 4.5,  6.7, 34. ,  3.6,  5. ],
       [ 2.5,  4.6,  7.8,  8.9, 50. ]])

arr2[0]#访问第一个

array([1.2, 2.3, 3. , 4. , 5.6])

arr2[0:3]

array([[ 1.2,  2.3,  3. ,  4. ,  5.6],
       [ 4.5,  6.7, 34. ,  3.6,  5. ],
       [ 2.5,  4.6,  7.8,  8.9, 50. ]])

arr2[1:3]

array([[ 4.5,  6.7, 34. ,  3.6,  5. ],
       [ 2.5,  4.6,  7.8,  8.9, 50. ]])

arr2[1,3]#第二行,第四列

3.6

arr2[1][3]#第二行,第四列

3.6

arr2[:,3]#第四列

array([4. , 3.6, 8.9])

arr2[:,1:3]#第二列到第三列

array([[ 2.3,  3. ],
       [ 6.7, 34. ],
       [ 4.6,  7.8]])#排序
s = np.array([1,2,4,3,6,5,90,67,54,32,12,9,7])

np.sort(s)#返回的是一个视图

array([ 1,  2,  3,  4,  5,  6,  7,  9, 12, 32, 54, 67, 90])

s

array([ 1,  2,  4,  3,  6,  5, 90, 67, 54, 32, 12,  9,  7])

s = np.sort(s)

s

array([ 1,  2,  3,  4,  5,  6,  7,  9, 12, 32, 54, 67, 90])

sorted(s,reverse=True)

[90, 67, 54, 32, 12, 9, 7, 6, 5, 4, 3, 2, 1]

np.array(sorted(s,reverse=True))

array([90, 67, 54, 32, 12,  9,  7,  6,  5,  4,  3,  2,  1])

np.argsort(s)

array([ 0,  1,  3,  2,  5,  4, 12, 11, 10,  9,  8,  7,  6], dtype=int64)

s

array([ 1,  2,  4,  3,  6,  5, 90, 67, 54, 32, 12,  9,  7])

#二维数组排序

arr1 = np.array([[0,1,3,],[4,2,9],[4,5,9],[1,-3,4]])

np.sort(arr1,axis = 0)#axis=0是沿着行的方向排序;axis=1是沿着列的方向排序

array([[ 0, -3,  3],
       [ 1,  1,  4],
       [ 4,  2,  9],
       [ 4,  5,  9]])

np.sort(arr1,axis = 1)#axis=0是沿着行的方向排序;axis=1是沿着列的方向排序

array([[ 0,  1,  3],
       [ 2,  4,  9],
       [ 4,  5,  9],
       [-3,  1,  4]])

​

s

array([ 1,  2,  4,  3,  6,  5, 90, 67, 54, 32, 12,  9,  7])

np.where(s>7,1,-1)#大于7返回1,否则返回-1

array([-1, -1, -1, -1, -1, -1,  1,  1,  1,  1,  1,  1, -1])

np.where(s>7,s,-1)

array([-1, -1, -1, -1, -1, -1, 90, 67, 54, 32, 12,  9, -1])

np.where(s>7,1,-4)

array([-4, -4, -4, -4, -4, -4,  1,  1,  1,  1,  1,  1, -4])

np.extract(s>7,s)#筛选出s>7的元素

array([90, 67, 54, 32, 12,  9])

2.2 pandas

#序列的创建(series)

import pandas as pd

series1 = pd.Series([2.8,3.01,8.99,8.58,5.18])

series1

0    2.80
1    3.01
2    8.99
3    8.58
4    5.18
dtype: float64

type(series1)#序列

pandas.core.series.Series

series2 = pd.Series([2.8,3.01,8.99,8.58,5.18],index=['a','b','c','d','e'],name='这是一个序列')

series2

a    2.80
b    3.01
c    8.99
d    8.58
e    5.18
Name: 这是一个序列, dtype: float64

series3 = pd.Series({'北京':2.8,'上海':3.01,'广东':8.99,'江苏':9.73,'浙江':5.18})#用字典

series3

北京    2.80
上海    3.01
广东    8.99
江苏    9.73
浙江    5.18
dtype: float64

series3[0:3]#左闭右开

北京    2.80
上海    3.01
广东    8.99
dtype: float64

series3['北京':'江苏']#左右都闭

北京    2.80
上海    3.01
广东    8.99
江苏    9.73
dtype: float64

series1.values#输入的是值

array([2.8 , 3.01, 8.99, 8.58, 5.18])

series3.index

​

Index(['北京', '上海', '广东', '江苏', '浙江'], dtype='object')

series1.index

RangeIndex(start=0, stop=5, step=1)

series1.dtype

dtype('float64')

dataframe

list1 = [['张三',23,'男'],['李四',27,'女'],['王二',26,'女']]#使用嵌套列表

df1 = pd.DataFrame(list1,columns=['姓名','年龄','性别'])

df1.head(5)

	姓名 	年龄 	性别
0 	张三 	231 	李四 	272 	王二 	26 	女

df2 = pd.DataFrame({'姓名':['张三','李四','王二'],'年龄':[23,24,26],'性别':['男','女','女'],})#使用字典

df2.head(5)

	姓名 	年龄 	性别
0 	张三 	231 	李四 	242 	王二 	26 	女

array1 = np.array([['张三',23,'男'],['李四',27,'女'],['王二',26,'女']])

df3 = pd.DataFrame(array1,columns=['姓名','年龄','性别'],index=['a','b','c'])#使用数组

df3

	姓名 	年龄 	性别
a 	张三 	23 	男
b 	李四 	27 	女
c 	王二 	26 	女

df3.values

array([['张三', '23', '男'],
       ['李四', '27', '女'],
       ['王二', '26', '女']], dtype=object)

df3.index

Index(['a', 'b', 'c'], dtype='object')

df3.columns

Index(['姓名', '年龄', '性别'], dtype='object')

df3.columns.tolist()#转化成列表

['姓名', '年龄', '性别']

df3.ndim

2

series1.ndim

1

df2.shape

(3, 3)

series1.shape

(5,)

df3.size

9

df3.dtypes

姓名    object
年龄    object
性别    object
dtype: object

df2.dtypes

姓名    object
年龄     int64
性别    object
dtype: object



series和dataframe常用方法如下:

方法名称 说明
values 返回对象所有元素的值
index 返回行索引
dtypes 返回类型
shape 返回对象数据形状
ndim 返回对象的维度
size 返回对象的个数
columns 返回列标签(只针对dataframe数据结构)

欢迎阅读数据清洗系列文章python数据清洗工具、方法、过程整理归纳