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

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数据结构)

欢迎

发布了5 篇原创文章 · 获赞 0 · 访问量 41

猜你喜欢

转载自blog.csdn.net/crystal_sugar/article/details/104379560