Pandas模块:读入excel/csv文件,过滤重复值和缺失值处理

时间:2024-10-30 07:41:06

excel文件数据为:

首先导入Pandas模块

import pandas as pd
'
运行

读取excel文件

  1. # 读取excel文件
  2. file_01 = pd.read_excel("")
  3. print(file_01, '\n')
  4. print('数据维度为:', file_01.shape, '\n', 'file_01的类型为:', type(file_01))

返回的结果 为

  1. Unnamed: 0 时间 变量1 变量2 变量3 变量4 变量5 输出应变量
  2. 0 1 2021-07-21 00:00:00 1 0 1 1.0 1 94.354
  3. 1 2 2021-07-22 00:00:00 1 0 1 1.0 2 118.340
  4. 2 3 2021-07-23 00:00:00 1 0 1 1.0 3 93.791
  5. 3 4 2021-07-24 00:00:00 1 0 1 2.0 1 86.593
  6. 4 5 2021-07-25 17:55:00 1 0 1 2.0 2 100.280
  7. 5 6 2021-07-26 17:55:00 1 0 1 2.0 3 94.121
  8. 6 7 2021-07-27 17:55:00 1 0 1 3.0 1 NaN
  9. 7 8 2021-07-28 17:55:00 1 0 1 3.0 2 113.920
  10. 8 9 2021-07-29 17:55:00 1 0 1 3.0 3 95.566
  11. 9 10 2021-07-30 17:55:00 1 0 1 NaN 1 100.870
  12. 10 11 2021-07-31 17:55:00 1 0 1 4.0 2 116.130
  13. 11 12 2021-08-01 17:55:00 1 0 1 4.0 3 103.830
  14. 12 13 2021-08-02 17:55:00 1 0 1 4.0 2 124.870
  15. 13 14 2021-08-03 17:55:00 1 0 1 4.0 3 91.475
  16. 14 15 2021-08-04 17:55:00 1 0 2 4.0 1 52.083
  17. 15 16 2021-08-05 17:55:00 1 0 2 4.0 2 45.912
  18. 16 17 2021-08-06 17:55:00 1 0 2 4.0 3 48.534
  19. 17 18 2021-08-07 17:55:00 1 0 2 4.0 1 21.255
  20. 18 19 2021-08-08 17:55:00 1 0 2 4.0 2 32.191
  21. 19 20 2021-08-09 17:55:00 1 0 2 4.0 3 24.832
  22. 数据维度为: (20, 8)
  23. file_01的类型为: <class ''>

可见返回的file_01的类型为DataFrame类型,相当于一个表格,表格中的缺失值用NaN来代替。

对数据进行预处理,需要判断数据是否重复和缺失,并对缺失的数据进行删去或者补充。

判断是否存在完全一致的数据行,可用duplicated函数 

  1. # 判断是否存在重复的行,若存在重复的行,返回True,否则返回False
  2. duplicated_data = file_01.duplicated()
  3. print(duplicated_data)

如果需要去掉重复的行,可使用drop_duplicates()函数

  1. # 去掉重复的行
  2. # print(file_01.drop_duplicates())
'
运行

如果需要输出一列去除重复值之后的数据,可使用unique()函数,结果返回的是去重之后的数据

  1. print(file_01['输出应变量'].unique()) # 返回去除重复值之后的变量
  2. print(type(file_01['输出应变量']))
  3. >>>
  4. [ 94.354 118.34 93.791 86.593 100.28 94.121 nan 113.92 95.566
  5. 100.87 116.13 103.83 124.87 91.475 52.083 45.912 48.534 21.255
  6. 32.191 24.832]
  7. <class ''>

需要注意的是,此时的一列数据为series类型,需要与numpy中的列表list进行区分,numpy中的unique()函数作用也是输出去重之后的数据,但是输出结果的顺序为数字,字符,空值

  1. import numpy as np
  2. # 自定义一个list列表
  3. lst = ['aa', , 9, 2, 1, 3, 5, 2, 'a', 'b', 'aa']
  4. print((lst))
  5. print(type(lst))
  6. >>>
  7. ['1' '2' '3' '5' '9' 'a' 'aa' 'b' 'nan']
  8. <class 'list'>

判断是否有缺失值使用isnull()函数

  1. """ 使用isnull()函数判断一行或者一列是否存在缺失值,
  2. 可使用axis关键字指定,axis=0为指定列变量;axis=1为指定行变量
  3. any()表示一行或者一列只要存在缺失值isnull函数就返回True,否则返回False"""
  4. print(file_01.isnull().any(axis=0))

运行结果:

  1. # 返回结果
  2. Unnamed: 0 False
  3. 时间 False
  4. 变量1 False
  5. 变量2 False
  6. 变量3 False
  7. 变量4 True
  8. 变量5 False
  9. 输出应变量 True
  10. dtype: bool

丢弃缺失值使用dropna()函数

  1. # axis指定行或者列
  2. # how指定丢弃方式,any指定只要有一行/列中某个数据存在缺失,就丢弃/all所有都为空就丢弃
  3. # subset可指定具体的列
  4. file_02 = file_01.dropna(how='any', axis=0)
  5. print(file_02)

丢弃结果 :

  1. Unnamed: 0 时间 变量1 变量2 变量3 变量4 变量5 输出应变量
  2. 0 1 2021-07-21 00:00:00 1 0 1 1.0 1 94.354
  3. 1 2 2021-07-22 00:00:00 1 0 1 1.0 2 118.340
  4. 2 3 2021-07-23 00:00:00 1 0 1 1.0 3 93.791
  5. 3 4 2021-07-24 00:00:00 1 0 1 2.0 1 86.593
  6. 4 5 2021-07-25 17:55:00 1 0 1 2.0 2 100.280
  7. 5 6 2021-07-26 17:55:00 1 0 1 2.0 3 94.121
  8. 7 8 2021-07-28 17:55:00 1 0 1 3.0 2 113.920
  9. 8 9 2021-07-29 17:55:00 1 0 1 3.0 3 95.566
  10. 10 11 2021-07-31 17:55:00 1 0 1 4.0 2 116.130
  11. 11 12 2021-08-01 17:55:00 1 0 1 4.0 3 103.830
  12. 12 13 2021-08-02 17:55:00 1 0 1 4.0 2 124.870
  13. 13 14 2021-08-03 17:55:00 1 0 1 4.0 3 91.475
  14. 14 15 2021-08-04 17:55:00 1 0 2 4.0 1 52.083
  15. 15 16 2021-08-05 17:55:00 1 0 2 4.0 2 45.912
  16. 16 17 2021-08-06 17:55:00 1 0 2 4.0 3 48.534
  17. 17 18 2021-08-07 17:55:00 1 0 2 4.0 1 21.255
  18. 18 19 2021-08-08 17:55:00 1 0 2 4.0 2 32.191
  19. 19 20 2021-08-09 17:55:00 1 0 2 4.0 3 24.832

进行缺失值的填充,可使用fillna()函数中的value进行指定,可指定数字或字符串

  1. # 缺失值的填充
  2. file_03 = file_01.fillna(value=0)
  3. print(file_03)