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 张三 23 男
1 李四 27 女
2 王二 26 女
df2 = pd.DataFrame({'姓名':['张三','李四','王二'],'年龄':[23,24,26],'性别':['男','女','女'],})#使用字典
df2.head(5)
姓名 年龄 性别
0 张三 23 男
1 李四 24 女
2 王二 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数据清洗工具、方法、过程整理归纳
上一篇: 利用matlab做回归分析
下一篇: 关于pandas索引的小记