python数据处理

重复值处理

1.1判断是否有重复值

import pandas as pd
data=pd.read_excel(r'F:\学习资料&笔记\素材\删除重复值素材.xlsx')
print(data)

打印的数据结果

autoid   id    name  kcid kcname  score
  1   2005001   张三     1     数学     69
  2   2005002   李四     1     数学     89
  3   2005001   张三     2     语文     90
  4   2005002   李四     2     语文     89
  5   2005001   张三     1     数学     69
  6   2005002   李四     1     数学     89
is1=data.duplicated()
is2=data.duplicated(['id','kcname'])
print(isduplicates1)
print(isduplicates2)
autoid     id         name  kcid  kcname  score      is1         is2
      1   2005001   张三     1     数学     69	   False       False
      2   2005002   李四     1     数学     89      False       False
      3   2005001   张三     2     语文     90      False       False
      4   2005002   李四     2     语文     89      False       False
      5   2005001   张三     1     数学     69      False       True
      6   2005002   李四     1     数学     89      False       True    
  1. is1 对全表的数据进行重复判断,由于autoid不同,所以is1 结果全为false
  2. is2 对id,和 kcname 两个字段进行重复判断,故最后两行数据判断结果为true

1.2删除重复值

new_data1=data.drop_duplicates(['id'])
new_data2=data.drop_duplicates(['id','kcname'])
new_data3=data.drop_duplicates(subset=['id','kcname'],keep='last', inplace=False)

new_data1 结果:按照ID去重,默认取第一条数据

   autoid     id     name     kcid   kcname  score
      1      2005001   张三     1     数学      69
      2      2005002   李四     1     数学      89

new_data2 结果:按照ID,kcname去重,默认取第一条数据

   autoid    id    name   kcid   kcname  score
      1  2005001   张三     1     数学     69
      2  2005002   李四     1     数学     89
      3  2005001   张三     2     语文     90
      4  2005002   李四     2     语文     89

new_data3 结果:按照ID,kcname去重,重复取最后一条数据

   autoid      id   name  kcid   kcname  score
       3  2005001   张三     2     语文     90
       4  2005002   李四     2     语文     89
       5  2005001   张三     1     数学     69
       6  2005002   李四     1     数学     89

2.缺失值处理

2.1判断是否有缺失值

import pandas as pd
data=pd.read_excel(r'F:\学习资料&笔记\素材\缺失值素材.xlsx')
print(data)
print(data.info())
      id     name   kcid   kcname  kcname2  score1  score2
0  2005001   张三   1.0     数学      数学   69.0     NaN
1  2005002   李四   1.0     数学      NaN    89.0     NaN
2  2005001   张三   2.0     语文      语文   90.0     NaN
3  2005002   李四   2.0     语文      NaN    89.0     NaN
4  2005001   张三   NaN     英语      英语    NaN    60.0
5  2005002   李四   NaN     英语      NaN     NaN    86.0
6  2005001   NaN    4.0     数学      数学    NaN    23.0
7  2005002   NaN    4.0     数学      NaN     NaN    90.0

info() 函数用来查看dataframe 字段信息以及字段中的数据信息

	<class 'pandas.core.frame.DataFrame'>
	RangeIndex: 8 entries, 0 to 7
	Data columns (total 7 columns):
	id         8 non-null int64
	name       6 non-null object
	kcid       6 non-null float64
	kcname     8 non-null object
	kcname2    4 non-null object
	score1     4 non-null float64
	score2     4 non-null float64
	dtypes: float64(3), int64(1), object(3)
	memory usage: 528.0+ bytes
	None
nan_all=data.isnull()     '获得所有数据框中的N值'
nan1=data.isnull().any()  '获得含有NA的列'
nan2=data.isnull().all()  '获得全部为NA的列'
print(nan1)
print(nan2)
	           nan1结果   nan2结果
	id         False       False    
	name        True       False    
	kcid        True       False    
	kcname     False       False    
	kcname2     True       False    
	score1      True       False    
	score2      True       False   

缺失值处理

2.2.1 向上填充
data['kcname2']=data['kcname2'].fillna(method='ffill')
print(data)

        id name  kcid kcname kcname2  score1  score2
0  2005001   张三   1.0     数学      数学    69.0     NaN
1  2005002   李四   1.0     数学      数学    89.0     NaN
2  2005001   张三   2.0     语文      语文    90.0     NaN
3  2005002   李四   2.0     语文      语文    89.0     NaN
4  2005001   张三   NaN     英语      英语     NaN    60.0
5  2005002   李四   NaN     英语      英语     NaN    86.0
6  2005001   NaN   4.0      数学      数学     NaN    23.0
7  2005002   NaN   4.0      数学      数学     NaN    90.0
2.2.3 向下填充
data['kcname2']=data['kcname2'].fillna(method='bfill')
print(data)

      id     name  kcid  kcname    kcname2  score1  score2
0  2005001   张三   1.0     数学      数学    69.0     NaN
1  2005002   李四   1.0     数学      语文    89.0     NaN
2  2005001   张三   2.0     语文      语文    90.0     NaN
3  2005002   李四   2.0     语文      英语    89.0     NaN
4  2005001   张三   NaN     英语      英语     NaN    60.0
5  2005002   李四   NaN     英语      数学     NaN    86.0
6  2005001   NaN   4.0      数学      数学     NaN    23.0
7  2005002   NaN   4.0      数学      NaN      NaN    90.0
2.2.3 不同列填充不同的值
data=data.fillna({'name':'王二','kcid':'3'})
print(data)

      id     name   kcid   kcname kcname2  score1  score2
0  2005001   张三    1     数学      数学    69.0    NaN
1  2005002   李四    1     数学      NaN     89.0    NaN
2  2005001   张三    2     语文      语文    90.0    NaN
3  2005002   李四    2     语文      NaN     89.0    NaN
4  2005001   张三    3     英语      英语    NaN    60.0
5  2005002   李四    3     英语      NaN     NaN    86.0
6  2005001   王二    4     数学      数学    NaN    23.0
7  2005002   王二    4     数学      NaN     NaN    90.0
2.2.4 不同列填充不同的值
data['score']=data['score1'].fillna(data['score2'])
print(data)

     id      name  kcid   kcname   kcname2  score1  score2  score
0  2005001   张三   1.0     数学      数学    69.0    NaN   69.0
1  2005002   李四   1.0     数学      NaN    89.0     NaN   89.0
2  2005001   张三   2.0     语文      语文    90.0    NaN   90.0
3  2005002   李四   2.0     语文      NaN    89.0     NaN   89.0
4  2005001   张三   NaN     英语      英语    NaN    60.0   60.0
5  2005002   李四   NaN     英语      NaN     NaN    86.0   86.0
6  2005001   NaN    4.0     数学      数学    NaN    23.0   23.0
7  2005002   NaN    4.0     数学      NaN     NaN    90.0   90.0
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值