数据清洗
import pandas as pd
import numpy as np
df = pd. DataFrame( np. random. randint( 10 , 100 , ( 10 , 3 ) ) , columns= list ( 'ABC' ) )
df. iloc[ 3 : 5 , 0 ] = np. nan
df. iloc[ 4 : 6 , 1 ] = np. nan
df. iloc[ 5 : 8 , 2 ] = np. nan
df. head( )
A B C 0 22.0 63.0 41.0 1 50.0 57.0 12.0 2 31.0 82.0 71.0 3 NaN 80.0 82.0 4 NaN NaN 49.0
缺失值
isnull():判断是缺失值 notnull():判断不是缺失值 fillna():缺失值填充 dropna():删除缺失值
缺失值判断
df[ 'A' ] . isnull( )
0 False
1 False
2 False
3 True
4 True
5 False
6 False
7 False
8 False
9 False
Name: A, dtype: bool
df[ 'A' ] . notnull( )
0 True
1 True
2 True
3 False
4 False
5 True
6 True
7 True
8 True
9 True
Name: A, dtype: bool
df[ 'A' ] . isnull( ) . value_counts( )
False 8
True 2
Name: A, dtype: int64
df. info( )
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 10 entries, 0 to 9
Data columns (total 3 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 A 8 non-null float64
1 B 8 non-null float64
2 C 7 non-null float64
dtypes: float64(3)
memory usage: 368.0 bytes
缺失值填充 丨★★
df. fillna( 0 )
A B C 0 22.0 63.0 41.0 1 50.0 57.0 12.0 2 31.0 82.0 71.0 3 0.0 80.0 82.0 4 0.0 0.0 49.0 5 44.0 0.0 0.0 6 61.0 86.0 0.0 7 25.0 17.0 0.0 8 53.0 51.0 84.0 9 44.0 36.0 54.0
df[ 'A' ] . fillna( 999 , inplace= True )
df
A B C 0 22.0 63.0 41.0 1 50.0 57.0 12.0 2 31.0 82.0 71.0 3 999.0 80.0 82.0 4 999.0 NaN 49.0 5 44.0 NaN NaN 6 61.0 86.0 NaN 7 25.0 17.0 NaN 8 53.0 51.0 84.0 9 44.0 36.0 54.0
df[ 'B' ] . isnull( ) . value_counts( )
df[ 'B' ] . mean( )
59.0
df[ 'B' ] . fillna( df[ 'B' ] . mean( ) , inplace= True )
df
A B C 0 22.0 63.0 41.0 1 50.0 57.0 12.0 2 31.0 82.0 71.0 3 999.0 80.0 82.0 4 999.0 59.0 49.0 5 44.0 59.0 NaN 6 61.0 86.0 NaN 7 25.0 17.0 NaN 8 53.0 51.0 84.0 9 44.0 36.0 54.0
缺失值删除 丨★★★
df. dropna( )
A B C 0 22.0 63.0 41.0 1 50.0 57.0 12.0 2 31.0 82.0 71.0 3 999.0 80.0 82.0 4 999.0 59.0 49.0 8 53.0 51.0 84.0 9 44.0 36.0 54.0
df. dropna( axis= 1 )
A B 0 22.0 63.0 1 50.0 57.0 2 31.0 82.0 3 999.0 80.0 4 999.0 59.0 5 44.0 59.0 6 61.0 86.0 7 25.0 17.0 8 53.0 51.0 9 44.0 36.0
df. dropna( subset= [ "C" ] , inplace= True )
df
A B C 0 22.0 63.0 41.0 1 50.0 57.0 12.0 2 31.0 82.0 71.0 3 999.0 80.0 82.0 4 999.0 59.0 49.0 8 53.0 51.0 84.0 9 44.0 36.0 54.0
df. dropna( how= "all" )
df. dropna( thresh= 2 )
A B C 0 22.0 63.0 41.0 1 50.0 57.0 12.0 2 31.0 82.0 71.0 3 999.0 80.0 82.0 4 999.0 59.0 49.0 8 53.0 51.0 84.0 9 44.0 36.0 54.0
重复值
import pandas as pd
import numpy as np
np. random. seed( 10 )
df = pd. DataFrame( np. random. randint( 80 , 100 , ( 10 , 3 ) ) , columns= [ 'A' , 'B' , 'C' ] )
df
A B C 0 89 84 95 1 80 97 96 2 97 88 89 3 80 90 88 4 84 99 96 5 84 95 91 6 91 81 88 7 84 94 97 8 99 93 85 9 93 99 93
重复值判断 丨★★
df[ df. duplicated( subset= 'A' , keep= False ) ]
A B C 1 80 97 96 3 80 90 88 4 84 99 96 5 84 95 91 7 84 94 97
df[ 'A' ] . duplicated( )
0 False
1 False
2 False
3 True
4 False
5 True
6 False
7 True
8 False
9 False
Name: A, dtype: bool
df[ 'A' ] . unique( )
array([89, 80, 97, 84, 91, 99, 93])
重复值删除 丨★★★
df. drop_duplicates( 'A' , inplace= True )
df
A B C 0 89 84 95 1 80 97 96 2 97 88 89 4 84 99 96 6 91 81 88 8 99 93 85 9 93 99 93
df. drop_duplicates( subset= [ 'A' , 'B' ] , keep= 'first' , inplace= True )
df
A B C 0 89 84 95 1 80 97 96 2 97 88 89 4 84 99 96 6 91 81 88 8 99 93 85 9 93 99 93
数据替换
import pandas as pd
grades = [ 48 , 99 , 75 , 80 , 42 , 80 , 72 , 68 , 36 , 78 ]
df = pd. DataFrame( { 'ID' : [ "N2000%d" % r for r in range ( 10 ) ] ,
'性别' : [ 'F' , 'M' , 'F' , 'M' , 'F' , 'M' , 'F' , 'M' , 'M' , 'M' ] ,
'考试年份' : [ '2007' , '2007' , '2007' , '2008' , '2008' , '2008' , '2008' , '2009' , '2009' , '2009' ] ,
'科目' : [ '代数' , '统计' , '生物' , '代数' , '代数' , '统计' , '统计' , '代数' , '生物' , '生物' ] ,
'是否参加' : [ 'yes' , 'yes' , 'yes' , 'yes' , 'no' , 'yes' , 'yes' , 'yes' , 'yes' , 'yes' ] ,
'是否通过' : [ 'yes' if x > 50 else 'no' for x in grades] ,
'是否录用' : [ True , True , True , False , False , False , False , True , True , False ] ,
'得分' : grades} )
df
ID 性别 考试年份 科目 是否参加 是否通过 是否录用 得分 0 N20000 F 2007 代数 yes no True 48 1 N20001 M 2007 统计 yes yes True 99 2 N20002 F 2007 生物 yes yes True 75 3 N20003 M 2008 代数 yes yes False 80 4 N20004 F 2008 代数 no no False 42 5 N20005 M 2008 统计 yes yes False 80 6 N20006 F 2008 统计 yes yes False 72 7 N20007 M 2009 代数 yes yes True 68 8 N20008 M 2009 生物 yes no True 36 9 N20009 M 2009 生物 yes yes False 78
一对一或者多对一替换 丨★★★
df[ '科目' ] . replace( [ '代数' , '统计' ] , '数学' , inplace= True )
df
ID 性别 考试年份 科目 是否参加 是否通过 是否录用 得分 0 N20000 F 2007 数学 yes no True 48 1 N20001 M 2007 数学 yes yes True 99 2 N20002 F 2007 生物 yes yes True 75 3 N20003 M 2008 数学 yes yes False 80 4 N20004 F 2008 数学 no no False 42 5 N20005 M 2008 数学 yes yes False 80 6 N20006 F 2008 数学 yes yes False 72 7 N20007 M 2009 数学 yes yes True 68 8 N20008 M 2009 生物 yes no True 36 9 N20009 M 2009 生物 yes yes False 78
多对多替换 丨★★★
df[ '是否参加' ] . replace( [ 'yes' , 'no' ] , [ '是' , '否' ] , inplace= True )
df
ID 性别 考试年份 科目 是否参加 是否通过 是否录用 得分 0 N20000 F 2007 数学 是 no True 48 1 N20001 M 2007 数学 是 yes True 99 2 N20002 F 2007 生物 是 yes True 75 3 N20003 M 2008 数学 是 yes False 80 4 N20004 F 2008 数学 否 no False 42 5 N20005 M 2008 数学 是 yes False 80 6 N20006 F 2008 数学 是 yes False 72 7 N20007 M 2009 数学 是 yes True 68 8 N20008 M 2009 生物 是 no True 36 9 N20009 M 2009 生物 是 yes False 78
map丨★★★
df[ '性别' ] = df[ '性别' ] . map ( lambda x: 'F' if x== 1 else 'M' )
df
ID 性别 考试年份 科目 是否参加 是否通过 是否录用 得分 0 N20000 M 2007 数学 是 no True 48 1 N20001 M 2007 数学 是 yes True 99 2 N20002 M 2007 生物 是 yes True 75 3 N20003 M 2008 数学 是 yes False 80 4 N20004 M 2008 数学 否 no False 42 5 N20005 M 2008 数学 是 yes False 80 6 N20006 M 2008 数学 是 yes False 72 7 N20007 M 2009 数学 是 yes True 68 8 N20008 M 2009 生物 是 no True 36 9 N20009 M 2009 生物 是 yes False 78
loc原地替换 丨★
df. loc[ df[ '是否通过' ] == 'yes' , '是否通过' ] = '是'
df. loc[ df[ '是否通过' ] == 'no' , '是否通过' ] = '否'
df
ID 性别 考试年份 科目 是否参加 是否通过 是否录用 得分 0 N20000 M 2007 数学 是 否 True 48 1 N20001 M 2007 数学 是 是 True 99 2 N20002 M 2007 生物 是 是 True 75 3 N20003 M 2008 数学 是 是 False 80 4 N20004 M 2008 数学 否 否 False 42 5 N20005 M 2008 数学 是 是 False 80 6 N20006 M 2008 数学 是 是 False 72 7 N20007 M 2009 数学 是 是 True 68 8 N20008 M 2009 生物 是 否 True 36 9 N20009 M 2009 生物 是 是 False 78
字典方式替换
df[ '性别' ] . replace( { 'F' : 1 , 'M' : 0 } , inplace= True )
df
ID 性别 考试年份 科目 是否参加 是否通过 是否录用 得分 0 N20000 0 2007 数学 是 否 True 48 1 N20001 0 2007 数学 是 是 True 99 2 N20002 0 2007 生物 是 是 True 75 3 N20003 0 2008 数学 是 是 False 80 4 N20004 0 2008 数学 否 否 False 42 5 N20005 0 2008 数学 是 是 False 80 6 N20006 0 2008 数学 是 是 False 72 7 N20007 0 2009 数学 是 是 True 68 8 N20008 0 2009 生物 是 否 True 36 9 N20009 0 2009 生物 是 是 False 78
字符串处理
字符串拆分 丨str.split() 丨★★★
import pandas as pd
import numpy as np
s2 = pd. Series( [ 'a_b_c' , 'c_d_e' , np. nan, 'f_g_h' ] )
s3 = s2. str . split( '_' )
s3
0 [a, b, c]
1 [c, d, e]
2 NaN
3 [f, g, h]
dtype: object
s2. str . split( '_' ) . str . get( 1 )
0 b
1 d
2 NaN
3 g
dtype: object
s2. str . split( '_' ) . str [ 1 ]
0 b
1 d
2 NaN
3 g
dtype: object
s2. str . split( '_' , expand= True )
0 1 2 0 a b c 1 c d e 2 NaN NaN NaN 3 f g h
s2. str . split( '_' , expand= True , n= 1 )
去除空格 丨str.strip() 丨★★★
s1 = pd. Series( [ ' jack' , 'jill ' , ' jesse ' , 'frank' ] )
s1
0 jack
1 jill
2 jesse
3 frank
dtype: object
s1. str . strip( )
0 jack
1 jill
2 jesse
3 frank
dtype: object
s1. str . lstrip( )
0 jack
1 jill
2 jesse
3 frank
dtype: object
s1. str . rstrip( )
0 jack
1 jill
2 jesse
3 frank
dtype: object
df = pd. DataFrame( np. random. randn( 3 , 2 ) , columns= [ ' Column A ' , ' Column B ' ] , index= range ( 3 ) )
df
Column A Column B 0 -1.254242 0.331579 1 -0.308600 -0.153735 2 0.678931 -1.913554
df. columns = df. columns. str . strip( ) . str . lower( ) . str . replace( ' ' , '_' )
df
column_a column_b 0 -1.254242 0.331579 1 -0.308600 -0.153735 2 0.678931 -1.913554
转换成小写 丨str.lower()
s1. str . lower( )
0 jack
1 jill
2 jesse
3 frank
dtype: object
转换成大写 丨str.upper()
s1. str . upper( )
0 JACK
1 JILL
2 JESSE
3 FRANK
dtype: object
格式化
name = '张三'
area = '中国'
weight = 60
height = 170
print ( '姓名%s,来自%s,体重%i,身高%i' % ( name, area, weight, height) )
print ( '姓名%s,来自%s,体重%.2f,身高%.2f' % ( name, area, weight, height) )
姓名张三,来自中国,体重60,身高170
姓名张三,来自中国,体重60.00,身高170.00
删除行列
import pandas as pd
import numpy as np
df = pd. DataFrame( np. random. normal( 10 , 2 , ( 4 , 4 ) ) , columns= [ 'A' , 'B' , 'C' , 'D' ] )
df
A B C D 0 8.115084 6.508914 7.958109 9.675862 1 8.684058 10.844226 11.248047 11.003280 2 11.682869 6.719500 12.116010 9.816431 3 8.551931 9.199079 10.890649 11.919879
df. drop( 'A' , axis= 1 )
B C D 0 6.508914 7.958109 9.675862 1 10.844226 11.248047 11.003280 2 6.719500 12.116010 9.816431 3 9.199079 10.890649 11.919879
df. drop( 'A' , axis= 1 , inplace= True )
df. drop( 1 )
B C D 0 6.508914 7.958109 9.675862 2 6.719500 12.116010 9.816431 3 9.199079 10.890649 11.919879
更改列名 丨★★★
import pandas as pd
import numpy as np
df = pd. DataFrame( np. random. normal( 10 , 2 , ( 4 , 4 ) ) , columns= [ 'A' , 'B' , 'C' , 'D' ] )
df
A B C D 0 7.307292 14.037799 12.164753 6.428564 1 9.455326 9.419263 13.312294 7.530863 2 7.884631 10.276828 9.828200 9.727539 3 7.725770 11.276272 9.016792 7.507430
df. columns= [ 'a' , 'b' , 'c' , 'd' ]
df
a b c d 0 7.307292 14.037799 12.164753 6.428564 1 9.455326 9.419263 13.312294 7.530863 2 7.884631 10.276828 9.828200 9.727539 3 7.725770 11.276272 9.016792 7.507430
df. rename( columns = { 'a' : 'aa' } , inplace= True )
df
aa b c d 0 7.307292 14.037799 12.164753 6.428564 1 9.455326 9.419263 13.312294 7.530863 2 7.884631 10.276828 9.828200 9.727539 3 7.725770 11.276272 9.016792 7.507430
改变列的格式 丨★★
import pandas as pd
import numpy as np
df = pd. DataFrame( np. random. rand( 5 , 3 ) , columns= [ 'A' , 'B' , 'C' ] )
df
A B C 0 0.224873 0.114649 0.583017 1 0.232641 0.556518 0.523811 2 0.350958 0.705332 0.820704 3 0.134563 0.604726 0.283148 4 0.506408 0.038460 0.332444
df[ 'A' ] = df[ 'A' ] . astype( 'str' )
df. dtypes
A object
B float64
C float64
dtype: object
df[ 'A' ] . sum ( )
'0.224872802469813340.232641062735879140.3509582237713720.134563003464316160.5064078198775632'
df[ 'B' ] . sum ( )
2.01968518853518
df[ 'B%' ] = df[ 'B' ] . apply ( lambda x: '%.2f%%' % ( x* 100 ) )
df
A B C B% 0 0.22487280246981334 0.114649 0.583017 11.46% 1 0.23264106273587914 0.556518 0.523811 55.65% 2 0.350958223771372 0.705332 0.820704 70.53% 3 0.13456300346431616 0.604726 0.283148 60.47% 4 0.5064078198775632 0.038460 0.332444 3.85%
索引
设置索引丨set_index() 丨★
from faker import Faker
fake= Faker( locale= 'zh_CN' )
Faker. seed( 10000 )
import pandas as pd
import numpy as np
import random
random. seed( 10000 )
data = pd. DataFrame( )
for i in range ( 100 ) :
datai = pd. DataFrame( { '编号' : "N2020_%d" % ( i) ,
'姓名' : fake. name( ) ,
'性别' : np. random. choice( [ '男' , '女' ] ) ,
'省份' : fake. province( ) ,
'公司' : fake. company( ) ,
'身份证号' : fake. ssn( ) ,
'邮箱' : fake. safe_email( ) ,
'手机号' : fake. phone_number( ) ,
'年龄' : np. random. randint( 30 , 50 , 1 ) ,
'完成率' : np. random. random( ) ,
'日期' : fake. date_time( ) ,
'销售' : fake. numerify( ) } ,
index = [ i] )
data = data. append( datai)
data. head( )
编号 姓名 性别 省份 公司 身份证号 邮箱 手机号 年龄 完成率 日期 销售 0 N2020_0 范金凤 女 四川省 方正科技信息有限公司 320401200112288520 syang@example.net 13104093059 33 0.377441 2009-06-28 16:36:39 488 1 N2020_1 李平 男 北京市 东方峻景科技有限公司 623001196812267643 nayao@example.com 14558214788 43 0.064251 2009-11-25 07:11:24 616 2 N2020_2 李林 男 福建省 昊嘉传媒有限公司 131000193309129587 shichao@example.net 15872567938 43 0.495049 1992-05-08 23:04:30 835 3 N2020_3 王玉华 女 台湾省 商软冠联网络有限公司 340822198708022149 lilei@example.com 18651489092 35 0.340037 1990-02-22 12:35:34 589 4 N2020_4 赵平 女 天津市 商软冠联传媒有限公司 33070219791019772X shenyong@example.net 18027050254 41 0.578136 2013-12-02 20:31:27 922
data1 = data. set_index( '省份' )
data1. head( )
编号 姓名 性别 公司 身份证号 邮箱 手机号 年龄 完成率 日期 销售 省份 四川省 N2020_0 范金凤 女 方正科技信息有限公司 320401200112288520 syang@example.net 13104093059 33 0.377441 2009-06-28 16:36:39 488 北京市 N2020_1 李平 男 东方峻景科技有限公司 623001196812267643 nayao@example.com 14558214788 43 0.064251 2009-11-25 07:11:24 616 福建省 N2020_2 李林 男 昊嘉传媒有限公司 131000193309129587 shichao@example.net 15872567938 43 0.495049 1992-05-08 23:04:30 835 台湾省 N2020_3 王玉华 女 商软冠联网络有限公司 340822198708022149 lilei@example.com 18651489092 35 0.340037 1990-02-22 12:35:34 589 天津市 N2020_4 赵平 女 商软冠联传媒有限公司 33070219791019772X shenyong@example.net 18027050254 41 0.578136 2013-12-02 20:31:27 922
data2 = data. set_index( [ '省份' , '姓名' ] )
data2. head( )
编号 性别 公司 身份证号 邮箱 手机号 年龄 完成率 日期 销售 省份 姓名 四川省 范金凤 N2020_0 女 方正科技信息有限公司 320401200112288520 syang@example.net 13104093059 33 0.377441 2009-06-28 16:36:39 488 北京市 李平 N2020_1 男 东方峻景科技有限公司 623001196812267643 nayao@example.com 14558214788 43 0.064251 2009-11-25 07:11:24 616 福建省 李林 N2020_2 男 昊嘉传媒有限公司 131000193309129587 shichao@example.net 15872567938 43 0.495049 1992-05-08 23:04:30 835 台湾省 王玉华 N2020_3 女 商软冠联网络有限公司 340822198708022149 lilei@example.com 18651489092 35 0.340037 1990-02-22 12:35:34 589 天津市 赵平 N2020_4 女 商软冠联传媒有限公司 33070219791019772X shenyong@example.net 18027050254 41 0.578136 2013-12-02 20:31:27 922
重置索引丨reset_index() 丨★
data1. reset_index( ) . head( )
省份 编号 姓名 性别 公司 身份证号 邮箱 手机号 年龄 完成率 日期 销售 0 四川省 N2020_0 范金凤 女 方正科技信息有限公司 320401200112288520 syang@example.net 13104093059 33 0.377441 2009-06-28 16:36:39 488 1 北京市 N2020_1 李平 男 东方峻景科技有限公司 623001196812267643 nayao@example.com 14558214788 43 0.064251 2009-11-25 07:11:24 616 2 福建省 N2020_2 李林 男 昊嘉传媒有限公司 131000193309129587 shichao@example.net 15872567938 43 0.495049 1992-05-08 23:04:30 835 3 台湾省 N2020_3 王玉华 女 商软冠联网络有限公司 340822198708022149 lilei@example.com 18651489092 35 0.340037 1990-02-22 12:35:34 589 4 天津市 N2020_4 赵平 女 商软冠联传媒有限公司 33070219791019772X shenyong@example.net 18027050254 41 0.578136 2013-12-02 20:31:27 922
data2. reset_index( level= 1 ) . head( )
姓名 编号 性别 公司 身份证号 邮箱 手机号 年龄 完成率 日期 销售 省份 四川省 范金凤 N2020_0 女 方正科技信息有限公司 320401200112288520 syang@example.net 13104093059 33 0.377441 2009-06-28 16:36:39 488 北京市 李平 N2020_1 男 东方峻景科技有限公司 623001196812267643 nayao@example.com 14558214788 43 0.064251 2009-11-25 07:11:24 616 福建省 李林 N2020_2 男 昊嘉传媒有限公司 131000193309129587 shichao@example.net 15872567938 43 0.495049 1992-05-08 23:04:30 835 台湾省 王玉华 N2020_3 女 商软冠联网络有限公司 340822198708022149 lilei@example.com 18651489092 35 0.340037 1990-02-22 12:35:34 589 天津市 赵平 N2020_4 女 商软冠联传媒有限公司 33070219791019772X shenyong@example.net 18027050254 41 0.578136 2013-12-02 20:31:27 922
更新索引丨reindex() 丨★
data3 = data. head( )
data3
编号 姓名 性别 省份 公司 身份证号 邮箱 手机号 年龄 完成率 日期 销售 0 N2020_0 范金凤 女 四川省 方正科技信息有限公司 320401200112288520 syang@example.net 13104093059 33 0.377441 2009-06-28 16:36:39 488 1 N2020_1 李平 男 北京市 东方峻景科技有限公司 623001196812267643 nayao@example.com 14558214788 43 0.064251 2009-11-25 07:11:24 616 2 N2020_2 李林 男 福建省 昊嘉传媒有限公司 131000193309129587 shichao@example.net 15872567938 43 0.495049 1992-05-08 23:04:30 835 3 N2020_3 王玉华 女 台湾省 商软冠联网络有限公司 340822198708022149 lilei@example.com 18651489092 35 0.340037 1990-02-22 12:35:34 589 4 N2020_4 赵平 女 天津市 商软冠联传媒有限公司 33070219791019772X shenyong@example.net 18027050254 41 0.578136 2013-12-02 20:31:27 922
data3. reindex( [ 2 , 3 , 0 , 1 , 4 ] , fill_value= 0 )
编号 姓名 性别 省份 公司 身份证号 邮箱 手机号 年龄 完成率 日期 销售 2 N2020_2 李林 男 福建省 昊嘉传媒有限公司 131000193309129587 shichao@example.net 15872567938 43 0.495049 1992-05-08 23:04:30 835 3 N2020_3 王玉华 女 台湾省 商软冠联网络有限公司 340822198708022149 lilei@example.com 18651489092 35 0.340037 1990-02-22 12:35:34 589 0 N2020_0 范金凤 女 四川省 方正科技信息有限公司 320401200112288520 syang@example.net 13104093059 33 0.377441 2009-06-28 16:36:39 488 1 N2020_1 李平 男 北京市 东方峻景科技有限公司 623001196812267643 nayao@example.com 14558214788 43 0.064251 2009-11-25 07:11:24 616 4 N2020_4 赵平 女 天津市 商软冠联传媒有限公司 33070219791019772X shenyong@example.net 18027050254 41 0.578136 2013-12-02 20:31:27 922
索引排序丨sort_index()
data1. sort_index( ascending= False ) . head( )
编号 姓名 性别 公司 身份证号 邮箱 手机号 年龄 完成率 日期 销售 省份 黑龙江省 N2020_75 刘鑫 女 超艺传媒有限公司 210701194711181795 zhaojun@example.com 13228202589 47 0.974812 1974-12-29 11:36:42 155 黑龙江省 N2020_55 蒋文 男 惠派国际公司信息有限公司 52272619661221162X fangchang@example.com 18636530837 42 0.304991 1971-10-22 00:37:03 259 黑龙江省 N2020_18 郑敏 男 彩虹信息有限公司 410200194702267611 gyin@example.org 15646946384 46 0.381412 1997-04-21 04:29:16 132 香港特别行政区 N2020_39 高洁 男 商软冠联信息有限公司 50011519990112238X lixue@example.org 13209584706 34 0.017030 1999-07-18 21:25:45 699 香港特别行政区 N2020_19 梁雪 男 银嘉科技有限公司 330825197106213864 yan14@example.org 13488583474 38 0.925357 1981-10-04 09:20:40 994
data2. sort_index( level= 1 , ascending= False ) . head( )
编号 性别 公司 身份证号 邮箱 手机号 年龄 完成率 日期 销售 省份 姓名 台湾省 黄燕 N2020_87 女 易动力传媒有限公司 370829199012030735 yong70@example.com 13242323364 31 0.471365 1985-08-17 18:52:10 408 西藏自治区 黄峰 N2020_13 男 良诺科技有限公司 510801193903095981 leifu@example.net 15660156361 36 0.986889 2016-03-23 15:45:29 291 宁夏回族自治区 黄丽丽 N2020_11 女 华远软件传媒有限公司 510114196409150161 tanchao@example.org 18137834227 37 0.885827 1987-08-14 18:46:45 382 香港特别行政区 高洁 N2020_39 男 商软冠联信息有限公司 50011519990112238X lixue@example.org 13209584706 34 0.017030 1999-07-18 21:25:45 699 江苏省 马彬 N2020_45 女 凌云信息有限公司 36073319691231944X qiang04@example.net 13578076912 43 0.573776 1990-01-29 02:45:42 160
data2. sort_index( level= [ 0 , 1 ] , ascending= [ False , False ] ) . head( )
编号 性别 公司 身份证号 邮箱 手机号 年龄 完成率 日期 销售 省份 姓名 黑龙江省 郑敏 N2020_18 男 彩虹信息有限公司 410200194702267611 gyin@example.org 15646946384 46 0.381412 1997-04-21 04:29:16 132 蒋文 N2020_55 男 惠派国际公司信息有限公司 52272619661221162X fangchang@example.com 18636530837 42 0.304991 1971-10-22 00:37:03 259 刘鑫 N2020_75 女 超艺传媒有限公司 210701194711181795 zhaojun@example.com 13228202589 47 0.974812 1974-12-29 11:36:42 155 香港特别行政区 高洁 N2020_39 男 商软冠联信息有限公司 50011519990112238X lixue@example.org 13209584706 34 0.017030 1999-07-18 21:25:45 699 梁雪 N2020_19 男 银嘉科技有限公司 330825197106213864 yan14@example.org 13488583474 38 0.925357 1981-10-04 09:20:40 994
数据筛选
from faker import Faker
fake= Faker( locale= 'zh_CN' )
Faker. seed( 10000 )
import pandas as pd
import numpy as np
import random
random. seed( 10000 )
data = pd. DataFrame( )
for i in range ( 100 ) :
datai = pd. DataFrame( { '编号' : "N2020_%d" % ( i) ,
'姓名' : fake. name( ) ,
'性别' : np. random. choice( [ '男' , '女' ] ) ,
'省份' : fake. province( ) ,
'公司' : fake. company( ) ,
'身份证号' : fake. ssn( ) ,
'邮箱' : fake. safe_email( ) ,
'手机号' : fake. phone_number( ) ,
'年龄' : np. random. randint( 30 , 50 , 1 ) ,
'完成率' : np. random. random( ) ,
'日期' : fake. date_time( ) ,
'销售' : fake. numerify( ) } ,
index = [ i] )
data = data. append( datai)
data. head( )
data. to_excel( 'C:/Users/users/Desktop/Python课件/课件编写/data/p4_数据清洗2.xlsx' )
筛选列 丨★★
data[ '姓名' ] . head( 10 )
0 范金凤
1 李平
2 李林
3 王玉华
4 赵平
5 陈桂花
6 韦亮
7 钟瑜
8 刘桂花
9 刘桂花
Name: 姓名, dtype: object
data[ [ '姓名' , '省份' ] ] . head( 10 )
姓名 省份 0 范金凤 四川省 1 李平 北京市 2 李林 福建省 3 王玉华 台湾省 4 赵平 天津市 5 陈桂花 河南省 6 韦亮 福建省 7 钟瑜 新疆维吾尔自治区 8 刘桂花 山东省 9 刘桂花 辽宁省
筛选行
data[ data[ '省份' ] == '北京市' ]
编号 姓名 性别 省份 公司 身份证号 邮箱 手机号 年龄 完成率 日期 销售 1 N2020_1 李平 男 北京市 东方峻景科技有限公司 623001196812267643 nayao@example.com 14558214788 46 0.057950 2009-11-25 07:11:24 616 23 N2020_23 李慧 女 北京市 巨奥信息有限公司 450223196310134685 bsong@example.com 18597786292 34 0.710752 1971-10-30 04:34:58 785
data[ ( data[ '性别' ] == '男' ) & ( data[ '省份' ] == '四川省' ) ]
编号 姓名 性别 省份 公司 身份证号 邮箱 手机号 年龄 完成率 日期 销售 29 N2020_29 温云 男 四川省 创汇传媒有限公司 411621195006187174 jun93@example.org 15764016109 30 0.037330 1995-07-27 08:30:33 005 52 N2020_52 陈秀梅 男 四川省 艾提科信科技有限公司 621022196409096901 fuxia@example.net 18797029868 36 0.735764 2014-02-16 02:19:28 005 56 N2020_56 徐艳 男 四川省 超艺网络有限公司 230404195602088429 ntang@example.org 15730053639 36 0.285640 1977-07-27 07:27:07 782 71 N2020_71 韩凤英 男 四川省 网新恒天网络有限公司 152202194306033785 cfeng@example.net 13699762247 39 0.089812 2019-06-26 04:44:02 760
根据内容精确匹配丨isin() 丨★★
data[ data[ '省份' ] . isin( [ '山东省' , '四川省' ] ) ] . head( )
编号 姓名 性别 省份 公司 身份证号 邮箱 手机号 年龄 完成率 日期 销售 0 N2020_0 范金凤 女 四川省 方正科技信息有限公司 320401200112288520 syang@example.net 13104093059 41 0.700930 2009-06-28 16:36:39 488 8 N2020_8 刘桂花 男 山东省 恩悌网络有限公司 230184197702140647 guochao@example.net 13310655117 34 0.516789 2015-09-29 16:21:28 439 29 N2020_29 温云 男 四川省 创汇传媒有限公司 411621195006187174 jun93@example.org 15764016109 30 0.037330 1995-07-27 08:30:33 005 35 N2020_35 宋楠 男 山东省 恒聪百汇网络有限公司 370213199602238217 yeming@example.com 13027921428 47 0.253179 1980-10-16 17:48:44 451 52 N2020_52 陈秀梅 男 四川省 艾提科信科技有限公司 621022196409096901 fuxia@example.net 18797029868 36 0.735764 2014-02-16 02:19:28 005
data[ data[ '年龄' ] . isin( [ 35 , 36 , 38 ] ) ] . head( )
编号 姓名 性别 省份 公司 身份证号 邮箱 手机号 年龄 完成率 日期 销售 4 N2020_4 赵平 女 天津市 商软冠联传媒有限公司 33070219791019772X shenyong@example.net 18027050254 38 0.160348 2013-12-02 20:31:27 922 5 N2020_5 陈桂花 女 河南省 华泰通安科技有限公司 51343219440729157X tianyan@example.com 15115129137 35 0.176635 2011-04-05 20:09:54 006 6 N2020_6 韦亮 女 福建省 合联电子科技有限公司 610730195403213354 yinmin@example.org 13680169513 36 0.713555 1988-09-08 02:15:10 769 7 N2020_7 钟瑜 女 新疆维吾尔自治区 浙大万朋传媒有限公司 632823199206261862 qiang32@example.net 15636503787 35 0.615502 2010-03-08 11:00:32 435 10 N2020_10 林秀兰 男 吉林省 恩悌科技有限公司 532524196805192224 tao83@example.com 14522841055 38 0.535469 1970-02-01 06:55:39 602
根据内容模糊匹配丨str.contains() 丨★★
data[ data[ '公司' ] . str . contains( '动力' ) ] . head( )
编号 姓名 性别 省份 公司 身份证号 邮箱 手机号 年龄 完成率 日期 销售 21 N2020_21 方琳 男 青海省 易动力网络有限公司 130481196911267803 kshao@example.com 14509729550 32 0.754724 2017-12-27 19:42:26 277 37 N2020_37 王梅 女 辽宁省 易动力科技有限公司 370812194801193481 yan07@example.org 18574736528 46 0.706331 1972-03-16 17:56:14 810 62 N2020_62 陈梅 女 四川省 易动力网络有限公司 341126199909224292 naduan@example.org 13818527086 34 0.969633 1970-02-04 14:33:40 411 87 N2020_87 黄燕 女 台湾省 易动力传媒有限公司 370829199012030735 yong70@example.com 13242323364 44 0.975404 1985-08-17 18:52:10 408 94 N2020_94 余建 女 西藏自治区 易动力网络有限公司 500120197803071859 yzhang@example.com 13304313249 32 0.055106 2008-05-29 04:44:57 194
data[ data[ '公司' ] . str . contains( '计算机|动力' ) ] . head( )
编号 姓名 性别 省份 公司 身份证号 邮箱 手机号 年龄 完成率 日期 销售 21 N2020_21 方琳 男 青海省 易动力网络有限公司 130481196911267803 kshao@example.com 14509729550 32 0.754724 2017-12-27 19:42:26 277 37 N2020_37 王梅 女 辽宁省 易动力科技有限公司 370812194801193481 yan07@example.org 18574736528 46 0.706331 1972-03-16 17:56:14 810 62 N2020_62 陈梅 女 四川省 易动力网络有限公司 341126199909224292 naduan@example.org 13818527086 34 0.969633 1970-02-04 14:33:40 411 70 N2020_70 徐涛 女 四川省 晖来计算机信息有限公司 441201195906202227 guiying06@example.com 13422409521 36 0.353785 1994-04-02 12:23:33 743 87 N2020_87 黄燕 女 台湾省 易动力传媒有限公司 370829199012030735 yong70@example.com 13242323364 44 0.975404 1985-08-17 18:52:10 408
根据字符串长度 丨str.len()
s1. str . len ( )
0 5
1 5
2 7
3 5
dtype: int64
根据字符串形式 丨str.is*() 丨★★★
df = pd. DataFrame( { '值' : [ 'HELLO' , 'world' , 'China' , 'Python' , ' ' , '10' , 100 , '字符串' , 'data' , np. nan] } )
df
值 0 HELLO 1 world 2 China 3 Python 4 5 10 6 100 7 字符串 8 data 9 NaN
df[ '字符串数值或者字母' ] = df[ '值' ] . str . isalnum( )
df
值 字符串数值或者字母 0 HELLO True 1 world True 2 China True 3 Python True 4 False 5 10 True 6 100 NaN 7 字符串 True 8 data True 9 NaN NaN
df[ '字母' ] = df[ '值' ] . str . isalpha( )
df
值 字符串数值或者字母 字母 0 HELLO True True 1 world True True 2 China True True 3 Python True True 4 False False 5 10 True False 6 100 NaN NaN 7 字符串 True True 8 data True True 9 NaN NaN NaN
df[ '字符串数字' ] = df[ '值' ] . str . isdigit( )
df
值 字符串数值或者字母 字母 字符串数字 0 HELLO True True False 1 world True True False 2 China True True False 3 Python True True False 4 False False False 5 10 True False True 6 100 NaN NaN NaN 7 字符串 True True False 8 data True True False 9 NaN NaN NaN NaN
df[ '小写字母' ] = df[ '值' ] . str . islower( )
df
值 字符串数值或者字母 字母 字符串数字 小写字母 0 HELLO True True False False 1 world True True False True 2 China True True False False 3 Python True True False False 4 False False False False 5 10 True False True False 6 100 NaN NaN NaN NaN 7 字符串 True True False False 8 data True True False True 9 NaN NaN NaN NaN NaN
df[ '大写字母' ] = df[ '值' ] . str . isupper( )
df
值 字符串数值或者字母 字母 字符串数字 小写字母 大写字母 0 HELLO True True False False True 1 world True True False True False 2 China True True False False False 3 Python True True False False False 4 False False False False False 5 10 True False True False False 6 100 NaN NaN NaN NaN NaN 7 字符串 True True False False False 8 data True True False True False 9 NaN NaN NaN NaN NaN NaN
df[ '首字母大写' ] = df[ '值' ] . str . istitle( )
df
值 字符串数值或者字母 字母 字符串数字 小写字母 大写字母 首字母大写 0 HELLO True True False False True False 1 world True True False True False False 2 China True True False False False True 3 Python True True False False False True 4 False False False False False False 5 10 True False True False False False 6 100 NaN NaN NaN NaN NaN NaN 7 字符串 True True False False False False 8 data True True False True False False 9 NaN NaN NaN NaN NaN NaN NaN
df[ '空格' ] = df[ '值' ] . str . isspace( )
df
值 字符串数值或者字母 字母 字符串数字 小写字母 大写字母 首字母大写 空格 0 HELLO True True False False True False False 1 world True True False True False False False 2 China True True False False False True False 3 Python True True False False False True False 4 False False False False False False True 5 10 True False True False False False False 6 100 NaN NaN NaN NaN NaN NaN NaN 7 字符串 True True False False False False False 8 data True True False True False False False 9 NaN NaN NaN NaN NaN NaN NaN NaN
分组后筛选丨groupby() 丨★★
data. sort_values( by= '年龄' ) . groupby( '省份' , as_index= False ) . first( ) . head( )
省份 编号 姓名 性别 公司 身份证号 邮箱 手机号 年龄 完成率 日期 销售 0 上海市 N2020_73 卢丹 女 盟新科技有限公司 370202194101232333 guiyingshi@example.org 15682747497 35 0.691084 2019-10-02 12:23:51 761 1 云南省 N2020_97 陈帅 男 商软冠联网络有限公司 46902319400324717X cuimin@example.net 14529122727 37 0.635785 2007-05-29 09:35:04 564 2 内蒙古自治区 N2020_47 谭利 女 时刻网络有限公司 140321194101147472 yan48@example.org 13363990254 32 0.910402 2011-11-03 00:34:49 373 3 北京市 N2020_23 李慧 女 巨奥信息有限公司 450223196310134685 bsong@example.com 18597786292 34 0.710752 1971-10-30 04:34:58 785 4 台湾省 N2020_61 曹凯 女 南康科技有限公司 150502196806098191 xiulanpan@example.org 13262601832 31 0.622077 1983-02-03 04:28:03 913
data. groupby( '省份' , as_index= False ) . apply ( lambda x: x[ x[ '完成率' ] > 0.95 ] ) . head( )
编号 姓名 性别 省份 公司 身份证号 邮箱 手机号 年龄 完成率 日期 销售 4 87 N2020_87 黄燕 女 台湾省 易动力传媒有限公司 370829199012030735 yong70@example.com 13242323364 44 0.975404 1985-08-17 18:52:10 408 5 33 N2020_33 冯璐 女 吉林省 太极科技有限公司 411381195107138515 pjia@example.org 13982410034 31 0.981835 2017-07-01 01:55:38 507 6 62 N2020_62 陈梅 女 四川省 易动力网络有限公司 341126199909224292 naduan@example.org 13818527086 34 0.969633 1970-02-04 14:33:40 411 9 51 N2020_51 李伟 男 安徽省 商软冠联网络有限公司 530701193409160440 taoduan@example.org 15322916084 34 0.982004 2006-04-29 07:34:08 977 15 96 N2020_96 李淑华 女 江西省 襄樊地球村信息有限公司 542431194904214928 xiulan99@example.org 13447067886 31 0.966989 1977-11-06 19:40:07 529
loc()
data. loc[ data[ '省份' ] == '四川省' ] . head( )
编号 姓名 性别 省份 公司 身份证号 邮箱 手机号 年龄 完成率 日期 销售 0 N2020_0 范金凤 女 四川省 方正科技信息有限公司 320401200112288520 syang@example.net 13104093059 41 0.700930 2009-06-28 16:36:39 488 29 N2020_29 温云 男 四川省 创汇传媒有限公司 411621195006187174 jun93@example.org 15764016109 30 0.037330 1995-07-27 08:30:33 005 52 N2020_52 陈秀梅 男 四川省 艾提科信科技有限公司 621022196409096901 fuxia@example.net 18797029868 36 0.735764 2014-02-16 02:19:28 005 56 N2020_56 徐艳 男 四川省 超艺网络有限公司 230404195602088429 ntang@example.org 15730053639 36 0.285640 1977-07-27 07:27:07 782 62 N2020_62 陈梅 女 四川省 易动力网络有限公司 341126199909224292 naduan@example.org 13818527086 34 0.969633 1970-02-04 14:33:40 411
data. loc[ data[ '年龄' ] > 35 ] . head( )
编号 姓名 性别 省份 公司 身份证号 邮箱 手机号 年龄 完成率 日期 销售 0 N2020_0 范金凤 女 四川省 方正科技信息有限公司 320401200112288520 syang@example.net 13104093059 41 0.700930 2009-06-28 16:36:39 488 1 N2020_1 李平 男 北京市 东方峻景科技有限公司 623001196812267643 nayao@example.com 14558214788 46 0.057950 2009-11-25 07:11:24 616 3 N2020_3 王玉华 男 台湾省 商软冠联网络有限公司 340822198708022149 lilei@example.com 18651489092 49 0.449515 1990-02-22 12:35:34 589 4 N2020_4 赵平 女 天津市 商软冠联传媒有限公司 33070219791019772X shenyong@example.net 18027050254 38 0.160348 2013-12-02 20:31:27 922 6 N2020_6 韦亮 女 福建省 合联电子科技有限公司 610730195403213354 yinmin@example.org 13680169513 36 0.713555 1988-09-08 02:15:10 769
data. loc[ data[ '年龄' ] > 35 , [ '姓名' , '销售' ] ] . head( )
姓名 销售 0 范金凤 488 1 李平 616 3 王玉华 589 4 赵平 922 6 韦亮 769
iloc()
data. iloc[ [ 2 , 3 , 5 ] , [ 0 , 1 , 2 ] ] . head( )
编号 姓名 性别 2 N2020_2 李林 男 3 N2020_3 王玉华 男 5 N2020_5 陈桂花 女
data. iloc[ 2 : , [ 0 , 1 , 2 ] ] . head( )
编号 姓名 性别 2 N2020_2 李林 男 3 N2020_3 王玉华 男 4 N2020_4 赵平 女 5 N2020_5 陈桂花 女 6 N2020_6 韦亮 女
data. iloc[ [ 2 , 3 , 5 ] , : ] . head( )
编号 姓名 性别 省份 公司 身份证号 邮箱 手机号 年龄 完成率 日期 销售 2 N2020_2 李林 男 福建省 昊嘉传媒有限公司 131000193309129587 shichao@example.net 15872567938 31 0.648331 1992-05-08 23:04:30 835 3 N2020_3 王玉华 男 台湾省 商软冠联网络有限公司 340822198708022149 lilei@example.com 18651489092 49 0.449515 1990-02-22 12:35:34 589 5 N2020_5 陈桂花 女 河南省 华泰通安科技有限公司 51343219440729157X tianyan@example.com 15115129137 35 0.176635 2011-04-05 20:09:54 006
数据排序
import pandas as pd
import numpy as np
df = pd. DataFrame( { 'animal' : 'cat dog cat fish dog cat cat' . split( ) ,
'size' : list ( 'SSMMMLL' ) ,
'weight' : [ 8 , 10 , 11 , 1 , 20 , 12 , 12 ] ,
'adult' : [ False ] * 5 + [ True ] * 2 } )
df
animal size weight adult 0 cat S 8 False 1 dog S 10 False 2 cat M 11 False 3 fish M 1 False 4 dog M 20 False 5 cat L 12 True 6 cat L 12 True
单个字段排序
df. sort_values( 'animal' )
df. sort_values( 'animal' , ascending= False )
animal size weight adult 3 fish M 1 False 1 dog S 10 False 4 dog M 20 False 0 cat S 8 False 2 cat M 11 False 5 cat L 12 True 6 cat L 12 True
多个字段排序
df. sort_values( [ 'animal' , 'weight' ] , ascending= [ True , False ] )
df. sort_values( [ 'animal' , 'weight' ] , ascending= False ) . head( )
animal size weight adult 3 fish M 1 False 4 dog M 20 False 1 dog S 10 False 5 cat L 12 True 6 cat L 12 True
日期数据
生成日期序列
import pandas as pd
dt1= pd. date_range( '2018-01-01' , periods= 10 , freq= 'D' )
dt1
DatetimeIndex(['2018-01-01', '2018-01-02', '2018-01-03', '2018-01-04',
'2018-01-05', '2018-01-06', '2018-01-07', '2018-01-08',
'2018-01-09', '2018-01-10'],
dtype='datetime64[ns]', freq='D')
dt2 = pd. period_range( '1/1/2018' , freq= 'D' , periods= 10 )
dt2
PeriodIndex(['2018-01-01', '2018-01-02', '2018-01-03', '2018-01-04',
'2018-01-05', '2018-01-06', '2018-01-07', '2018-01-08',
'2018-01-09', '2018-01-10'],
dtype='period[D]', freq='D')
设置为日期格式丨★★★
import pandas as pd
import numpy as np
df = pd. DataFrame( { '日期' : [ '2020-3-1%i' % i for i in range ( 10 ) ] ,
'值' : np. random. randint( 80 , 100 , 10 ) } )
df. head( )
日期 值 0 2020-3-10 82 1 2020-3-11 92 2 2020-3-12 89 3 2020-3-13 83 4 2020-3-14 87
df. dtypes
日期 object
值 int32
dtype: object
df[ '日期_to_datetime' ] = pd. to_datetime( df[ '日期' ] )
df
日期 值 日期_to_datetime 0 2020-3-10 82 2020-03-10 1 2020-3-11 92 2020-03-11 2 2020-3-12 89 2020-03-12 3 2020-3-13 83 2020-03-13 4 2020-3-14 87 2020-03-14 5 2020-3-15 89 2020-03-15 6 2020-3-16 92 2020-03-16 7 2020-3-17 85 2020-03-17 8 2020-3-18 87 2020-03-18 9 2020-3-19 88 2020-03-19
from datetime import datetime
df[ '日期_strptime' ] = [ datetime. strptime( x, '%Y-%m-%d' ) for x in df[ '日期' ] ]
df[ '日期_strptime1' ] = df[ '日期' ] . apply ( lambda x: datetime. strptime( x, '%Y-%m-%d' ) )
df. head( )
日期 值 日期_to_datetime 日期_strptime 日期_strptime1 0 2020-3-10 82 2020-03-10 2020-03-10 2020-03-10 1 2020-3-11 92 2020-03-11 2020-03-11 2020-03-11 2 2020-3-12 89 2020-03-12 2020-03-12 2020-03-12 3 2020-3-13 83 2020-03-13 2020-03-13 2020-03-13 4 2020-3-14 87 2020-03-14 2020-03-14 2020-03-14
df. dtypes
日期 object
值 int32
日期_to_datetime datetime64[ns]
日期_strptime datetime64[ns]
日期_strptime1 datetime64[ns]
dtype: object
计算日期间隔
from faker import Faker
fake= Faker( locale= 'zh_CN' )
Faker. seed( 10000 )
import pandas as pd
import numpy as np
np. random. seed( 10000 )
data = pd. DataFrame( )
for i in range ( 10 ) :
datai = pd. DataFrame( { '日期1' : fake. date_time( ) ,
'日期2' : fake. date_time( ) } ,
index = [ i] )
data = data. append( datai)
data. head( )
日期1 日期2 0 2009-04-30 04:12:39 1990-04-20 10:50:04 1 1972-06-24 22:03:04 2016-12-18 11:20:24 2 1978-02-20 20:28:27 2018-02-10 03:32:35 3 1971-09-20 13:10:15 2014-06-06 21:00:06 4 2012-09-25 11:13:48 1970-03-09 07:51:55
data[ '间隔' ] = data[ '日期1' ] - data[ '日期2' ]
data[ '间隔' ] = data[ '间隔' ] . apply ( lambda x: x. days)
data
日期1 日期2 间隔 0 2009-04-30 04:12:39 1990-04-20 10:50:04 6949 1 1972-06-24 22:03:04 2016-12-18 11:20:24 -16248 2 1978-02-20 20:28:27 2018-02-10 03:32:35 -14600 3 1971-09-20 13:10:15 2014-06-06 21:00:06 -15601 4 2012-09-25 11:13:48 1970-03-09 07:51:55 15541 5 1987-10-02 22:19:30 2004-05-07 06:11:36 -6062 6 1992-03-10 12:30:02 1981-12-14 19:46:38 3738 7 1977-02-15 06:07:52 2016-03-19 14:59:26 -14278 8 2008-10-18 14:07:05 1995-07-18 02:32:49 4841 9 1970-05-28 23:34:24 1990-11-12 11:48:09 -7473
data[ '间隔_re' ] = list ( map ( lambda x: x. days, pd. to_datetime( 'today' ) - data[ '日期1' ] ) )
data. head( )
日期1 日期2 间隔 间隔_re 0 2009-04-30 04:12:39 1990-04-20 10:50:04 6949 3978 1 1972-06-24 22:03:04 2016-12-18 11:20:24 -16248 17436 2 1978-02-20 20:28:27 2018-02-10 03:32:35 -14600 15369 3 1971-09-20 13:10:15 2014-06-06 21:00:06 -15601 17714 4 2012-09-25 11:13:48 1970-03-09 07:51:55 15541 2734
格式化丨datetime.strftime() 丨★
import pandas as pd
import numpy as np
data = pd. read_excel( 'C:/Users/users/Desktop/Python课件/课件编写/data/p4_数据清洗2.xlsx' , index_col= 0 )
data. head( )
编号 姓名 性别 省份 公司 身份证号 邮箱 手机号 年龄 完成率 日期 销售 0 N2020_0 范金凤 女 四川省 方正科技信息有限公司 320401200112288520 syang@example.net 13104093059 41 0.700930 2009-06-28 16:36:39 488 1 N2020_1 李平 男 北京市 东方峻景科技有限公司 623001196812267643 nayao@example.com 14558214788 46 0.057950 2009-11-25 07:11:24 616 2 N2020_2 李林 男 福建省 昊嘉传媒有限公司 131000193309129587 shichao@example.net 15872567938 31 0.648331 1992-05-08 23:04:30 835 3 N2020_3 王玉华 男 台湾省 商软冠联网络有限公司 340822198708022149 lilei@example.com 18651489092 49 0.449515 1990-02-22 12:35:34 589 4 N2020_4 赵平 女 天津市 商软冠联传媒有限公司 33070219791019772X shenyong@example.net 18027050254 38 0.160348 2013-12-02 20:31:27 922
from datetime import datetime
data[ '日期_re' ] = [ datetime. strftime( x, '%Y-%m-%d' ) for x in data[ '日期' ] ]
data. head( )
编号 姓名 性别 省份 公司 身份证号 邮箱 手机号 年龄 完成率 日期 销售 日期_re 0 N2020_0 范金凤 女 四川省 方正科技信息有限公司 320401200112288520 syang@example.net 13104093059 41 0.700930 2009-06-28 16:36:39 488 2009-06-28 1 N2020_1 李平 男 北京市 东方峻景科技有限公司 623001196812267643 nayao@example.com 14558214788 46 0.057950 2009-11-25 07:11:24 616 2009-11-25 2 N2020_2 李林 男 福建省 昊嘉传媒有限公司 131000193309129587 shichao@example.net 15872567938 31 0.648331 1992-05-08 23:04:30 835 1992-05-08 3 N2020_3 王玉华 男 台湾省 商软冠联网络有限公司 340822198708022149 lilei@example.com 18651489092 49 0.449515 1990-02-22 12:35:34 589 1990-02-22 4 N2020_4 赵平 女 天津市 商软冠联传媒有限公司 33070219791019772X shenyong@example.net 18027050254 38 0.160348 2013-12-02 20:31:27 922 2013-12-02
data. dtypes
编号 object
姓名 object
性别 object
省份 object
公司 object
身份证号 object
邮箱 object
手机号 int64
年龄 int64
完成率 float64
日期 datetime64[ns]
销售 int64
日期_re object
dtype: object
日期索引丨set_index()
import pandas as pd
import numpy as np
data = pd. read_excel( 'C:/Users/users/Desktop/Python课件/课件编写/data/p4_数据清洗2.xlsx' , index_col= 0 )
data. head( )
编号 姓名 性别 省份 公司 身份证号 邮箱 手机号 年龄 完成率 日期 销售 0 N2020_0 范金凤 女 四川省 方正科技信息有限公司 320401200112288520 syang@example.net 13104093059 41 0.700930 2009-06-28 16:36:39 488 1 N2020_1 李平 男 北京市 东方峻景科技有限公司 623001196812267643 nayao@example.com 14558214788 46 0.057950 2009-11-25 07:11:24 616 2 N2020_2 李林 男 福建省 昊嘉传媒有限公司 131000193309129587 shichao@example.net 15872567938 31 0.648331 1992-05-08 23:04:30 835 3 N2020_3 王玉华 男 台湾省 商软冠联网络有限公司 340822198708022149 lilei@example.com 18651489092 49 0.449515 1990-02-22 12:35:34 589 4 N2020_4 赵平 女 天津市 商软冠联传媒有限公司 33070219791019772X shenyong@example.net 18027050254 38 0.160348 2013-12-02 20:31:27 922
data. set_index( '日期' , inplace= True )
data. head( )
编号 姓名 性别 省份 公司 身份证号 邮箱 手机号 年龄 完成率 销售 日期 2009-06-28 16:36:39 N2020_0 范金凤 女 四川省 方正科技信息有限公司 320401200112288520 syang@example.net 13104093059 41 0.700930 488 2009-11-25 07:11:24 N2020_1 李平 男 北京市 东方峻景科技有限公司 623001196812267643 nayao@example.com 14558214788 46 0.057950 616 1992-05-08 23:04:30 N2020_2 李林 男 福建省 昊嘉传媒有限公司 131000193309129587 shichao@example.net 15872567938 31 0.648331 835 1990-02-22 12:35:34 N2020_3 王玉华 男 台湾省 商软冠联网络有限公司 340822198708022149 lilei@example.com 18651489092 49 0.449515 589 2013-12-02 20:31:27 N2020_4 赵平 女 天津市 商软冠联传媒有限公司 33070219791019772X shenyong@example.net 18027050254 38 0.160348 922
日期筛选 丨★★★
data[ '2019' ]
编号 姓名 性别 省份 公司 身份证号 邮箱 手机号 年龄 完成率 销售 日期 2019-07-16 12:20:13 N2020_22 陆岩 男 浙江省 毕博诚科技有限公司 542522198007113665 yangsun@example.com 14576069728 38 0.566517 262 2019-12-30 06:36:17 N2020_36 伍荣 男 广西壮族自治区 富罳网络有限公司 230882197007262293 dchang@example.com 18200579436 46 0.773116 674 2019-11-13 07:39:06 N2020_57 刘红梅 男 宁夏回族自治区 华成育卓网络有限公司 431102193803033408 weiye@example.net 13235351585 36 0.368342 436 2019-06-26 04:44:02 N2020_71 韩凤英 男 四川省 网新恒天网络有限公司 152202194306033785 cfeng@example.net 13699762247 39 0.089812 760 2019-10-02 12:23:51 N2020_73 卢丹 女 上海市 盟新科技有限公司 370202194101232333 guiyingshi@example.org 15682747497 35 0.691084 761
data[ '2019-11' ]
编号 姓名 性别 省份 公司 身份证号 邮箱 手机号 年龄 完成率 销售 日期 2019-11-13 07:39:06 N2020_57 刘红梅 男 宁夏回族自治区 华成育卓网络有限公司 431102193803033408 weiye@example.net 13235351585 36 0.368342 436
data[ '2019-11-01' : '2019-11-20' ]
编号 姓名 性别 省份 公司 身份证号 邮箱 手机号 年龄 完成率 销售 日期 2019-11-13 07:39:06 N2020_57 刘红梅 男 宁夏回族自治区 华成育卓网络有限公司 431102193803033408 weiye@example.net 13235351585 36 0.368342 436
改变日期数据频率丨to_period()
data. to_period( 'M' ) . head( )
编号 姓名 性别 省份 公司 身份证号 邮箱 手机号 年龄 完成率 销售 日期 2009-06 N2020_0 范金凤 女 四川省 方正科技信息有限公司 320401200112288520 syang@example.net 13104093059 41 0.700930 488 2009-11 N2020_1 李平 男 北京市 东方峻景科技有限公司 623001196812267643 nayao@example.com 14558214788 46 0.057950 616 1992-05 N2020_2 李林 男 福建省 昊嘉传媒有限公司 131000193309129587 shichao@example.net 15872567938 31 0.648331 835 1990-02 N2020_3 王玉华 男 台湾省 商软冠联网络有限公司 340822198708022149 lilei@example.com 18651489092 49 0.449515 589 2013-12 N2020_4 赵平 女 天津市 商软冠联传媒有限公司 33070219791019772X shenyong@example.net 18027050254 38 0.160348 922
data. to_period( 'Y' ) . reset_index( ) . head( )
日期 编号 姓名 性别 省份 公司 身份证号 邮箱 手机号 年龄 完成率 销售 0 2009 N2020_0 范金凤 女 四川省 方正科技信息有限公司 320401200112288520 syang@example.net 13104093059 41 0.700930 488 1 2009 N2020_1 李平 男 北京市 东方峻景科技有限公司 623001196812267643 nayao@example.com 14558214788 46 0.057950 616 2 1992 N2020_2 李林 男 福建省 昊嘉传媒有限公司 131000193309129587 shichao@example.net 15872567938 31 0.648331 835 3 1990 N2020_3 王玉华 男 台湾省 商软冠联网络有限公司 340822198708022149 lilei@example.com 18651489092 49 0.449515 589 4 2013 N2020_4 赵平 女 天津市 商软冠联传媒有限公司 33070219791019772X shenyong@example.net 18027050254 38 0.160348 922
本节重点
缺失值填充 缺失值删除:subset参数 重复值删除:subset参数 更改列名:columns参数 替换 排序