Python数据分析基础_第4节:数据清洗

数据清洗

# 示例数据
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()
ABC
022.063.041.0
150.057.012.0
231.082.071.0
3NaN80.082.0
4NaNNaN49.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

缺失值填充 丨★★

# 所有缺失值都填充为0,不常用。一般只针对某个变量进行填充
df.fillna(0)
ABC
022.063.041.0
150.057.012.0
231.082.071.0
30.080.082.0
40.00.049.0
544.00.00.0
661.086.00.0
725.017.00.0
853.051.084.0
944.036.054.0
# A列缺失值为空的填充为999
df['A'].fillna(999,inplace=True)
df
ABC
022.063.041.0
150.057.012.0
231.082.071.0
3999.080.082.0
4999.0NaN49.0
544.0NaNNaN
661.086.0NaN
725.017.0NaN
853.051.084.0
944.036.054.0
# B列填充为平均值
df['B'].isnull().value_counts()     # 有几个缺失值  必须带()  
df['B'].mean()    # B平均值多少
59.0
# 填充缺失值
df['B'].fillna(df['B'].mean(),inplace=True)
df
ABC
022.063.041.0
150.057.012.0
231.082.071.0
3999.080.082.0
4999.059.049.0
544.059.0NaN
661.086.0NaN
725.017.0NaN
853.051.084.0
944.036.054.0

缺失值删除 丨★★★

# 删除有缺失值的行,不常用。
df.dropna()    # 默认是0
ABC
022.063.041.0
150.057.012.0
231.082.071.0
3999.080.082.0
4999.059.049.0
853.051.084.0
944.036.054.0
# 删除有缺失值的列,不常用
df.dropna(axis=1)
AB
022.063.0
150.057.0
231.082.0
3999.080.0
4999.059.0
544.059.0
661.086.0
725.017.0
853.051.0
944.036.0
# 删除C列为缺失值的行
# df['C'].dropna(inplace=True)  错误写法,也不报错
df.dropna(subset=["C"],inplace=True)    # []不能少   ★★★
df
ABC
022.063.041.0
150.057.012.0
231.082.071.0
3999.080.082.0
4999.059.049.0
853.051.084.0
944.036.054.0
df.dropna(how="all")   # 删除全为空的行
df.dropna(thresh=2)    # 删除缺失值个数大于2的
ABC
022.063.041.0
150.057.012.0
231.082.071.0
3999.080.082.0
4999.059.049.0
853.051.084.0
944.036.054.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
ABC
0898495
1809796
2978889
3809088
4849996
5849591
6918188
7849497
8999385
9939993

重复值判断 丨★★

# 筛选重复数据,
df[df.duplicated(subset='A',keep=False)]    # False(都不删除)  'first'(删除第一条)  'last'(删除最后第一条)
ABC
1809796
3809088
4849996
5849591
7849497
# 判断重复值,第一次出现的为False
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
ABC
0898495
1809796
2978889
4849996
6918188
8999385
9939993
# 多个字段判的
df.drop_duplicates(subset=['A','B'],keep='first',inplace=True)
df
ABC
0898495
1809796
2978889
4849996
6918188
8999385
9939993

数据替换

# 示例数据
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性别考试年份科目是否参加是否通过是否录用得分
0N20000F2007代数yesnoTrue48
1N20001M2007统计yesyesTrue99
2N20002F2007生物yesyesTrue75
3N20003M2008代数yesyesFalse80
4N20004F2008代数nonoFalse42
5N20005M2008统计yesyesFalse80
6N20006F2008统计yesyesFalse72
7N20007M2009代数yesyesTrue68
8N20008M2009生物yesnoTrue36
9N20009M2009生物yesyesFalse78

一对一或者多对一替换 丨★★★

df['科目'].replace(['代数','统计'],'数学',inplace=True)
df
ID性别考试年份科目是否参加是否通过是否录用得分
0N20000F2007数学yesnoTrue48
1N20001M2007数学yesyesTrue99
2N20002F2007生物yesyesTrue75
3N20003M2008数学yesyesFalse80
4N20004F2008数学nonoFalse42
5N20005M2008数学yesyesFalse80
6N20006F2008数学yesyesFalse72
7N20007M2009数学yesyesTrue68
8N20008M2009生物yesnoTrue36
9N20009M2009生物yesyesFalse78

多对多替换 丨★★★

df['是否参加'].replace(['yes','no'],['是','否'],inplace=True)
df
ID性别考试年份科目是否参加是否通过是否录用得分
0N20000F2007数学noTrue48
1N20001M2007数学yesTrue99
2N20002F2007生物yesTrue75
3N20003M2008数学yesFalse80
4N20004F2008数学noFalse42
5N20005M2008数学yesFalse80
6N20006F2008数学yesFalse72
7N20007M2009数学yesTrue68
8N20008M2009生物noTrue36
9N20009M2009生物yesFalse78

map丨★★★

df['性别'] = df['性别'].map(lambda x: 'F' if x==1 else 'M')
df
ID性别考试年份科目是否参加是否通过是否录用得分
0N20000M2007数学noTrue48
1N20001M2007数学yesTrue99
2N20002M2007生物yesTrue75
3N20003M2008数学yesFalse80
4N20004M2008数学noFalse42
5N20005M2008数学yesFalse80
6N20006M2008数学yesFalse72
7N20007M2009数学yesTrue68
8N20008M2009生物noTrue36
9N20009M2009生物yesFalse78

loc原地替换 丨★

df.loc[df['是否通过']=='yes', '是否通过'] = '是'
df.loc[df['是否通过']=='no', '是否通过'] = '否'
df
ID性别考试年份科目是否参加是否通过是否录用得分
0N20000M2007数学True48
1N20001M2007数学True99
2N20002M2007生物True75
3N20003M2008数学False80
4N20004M2008数学False42
5N20005M2008数学False80
6N20006M2008数学False72
7N20007M2009数学True68
8N20008M2009生物True36
9N20009M2009生物False78

字典方式替换

df['性别'].replace({'F':1, 'M':0},inplace=True)
df
ID性别考试年份科目是否参加是否通过是否录用得分
0N2000002007数学True48
1N2000102007数学True99
2N2000202007生物True75
3N2000302008数学False80
4N2000402008数学False42
5N2000502008数学False80
6N2000602008数学False72
7N2000702009数学True68
8N2000802009生物True36
9N2000902009生物False78

字符串处理

字符串拆分 丨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)   #展开
012
0abc
1cde
2NaNNaNNaN
3fgh
s2.str.split('_', expand=True, n=1)
01
0ab_c
1cd_e
2NaNNaN
3fg_h

去除空格 丨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 AColumn B
0-1.2542420.331579
1-0.308600-0.153735
20.678931-1.913554
df.columns = df.columns.str.strip().str.lower().str.replace(' ', '_')   # 注意三个str
df
column_acolumn_b
0-1.2542420.331579
1-0.308600-0.153735
20.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
ABCD
08.1150846.5089147.9581099.675862
18.68405810.84422611.24804711.003280
211.6828696.71950012.1160109.816431
38.5519319.19907910.89064911.919879
# 删除A列,但不改变源数据
df.drop('A',axis=1)
BCD
06.5089147.9581099.675862
110.84422611.24804711.003280
26.71950012.1160109.816431
39.19907910.89064911.919879
# 删除A列,且改变源数据
df.drop('A',axis=1,inplace=True)
# 删除所有为1的行,axis=0 可不写 ,当删除多行是用列表
df.drop(1)   
BCD
06.5089147.9581099.675862
26.71950012.1160109.816431
39.19907910.89064911.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
ABCD
07.30729214.03779912.1647536.428564
19.4553269.41926313.3122947.530863
27.88463110.2768289.8282009.727539
37.72577011.2762729.0167927.507430
# 方法1:
df.columns= ['a','b','c','d']  # 列名的个数 = 字段个数
df
abcd
07.30729214.03779912.1647536.428564
19.4553269.41926313.3122947.530863
27.88463110.2768289.8282009.727539
37.72577011.2762729.0167927.507430
# 方法2:字典,可单个修改
df.rename(columns = {'a':'aa'},inplace=True)   # columns不能少  ★★★
df
aabcd
07.30729214.03779912.1647536.428564
19.4553269.41926313.3122947.530863
27.88463110.2768289.8282009.727539
37.72577011.2762729.0167927.507430

改变列的格式 丨★★

# 示例数据
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(5,3),columns=['A','B','C'])
df
ABC
00.2248730.1146490.583017
10.2326410.5565180.523811
20.3509580.7053320.820704
30.1345630.6047260.283148
40.5064080.0384600.332444
# A列转未字符串
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
ABCB%
00.224872802469813340.1146490.58301711.46%
10.232641062735879140.5565180.52381155.65%
20.3509582237713720.7053320.82070470.53%
30.134563003464316160.6047260.28314860.47%
40.50640781987756320.0384600.3324443.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()
编号姓名性别省份公司身份证号邮箱手机号年龄完成率日期销售
0N2020_0范金凤四川省方正科技信息有限公司320401200112288520syang@example.net13104093059330.3774412009-06-28 16:36:39488
1N2020_1李平北京市东方峻景科技有限公司623001196812267643nayao@example.com14558214788430.0642512009-11-25 07:11:24616
2N2020_2李林福建省昊嘉传媒有限公司131000193309129587shichao@example.net15872567938430.4950491992-05-08 23:04:30835
3N2020_3王玉华台湾省商软冠联网络有限公司340822198708022149lilei@example.com18651489092350.3400371990-02-22 12:35:34589
4N2020_4赵平天津市商软冠联传媒有限公司33070219791019772Xshenyong@example.net18027050254410.5781362013-12-02 20:31:27922
data1 = data.set_index('省份')
data1.head()
编号姓名性别公司身份证号邮箱手机号年龄完成率日期销售
省份
四川省N2020_0范金凤方正科技信息有限公司320401200112288520syang@example.net13104093059330.3774412009-06-28 16:36:39488
北京市N2020_1李平东方峻景科技有限公司623001196812267643nayao@example.com14558214788430.0642512009-11-25 07:11:24616
福建省N2020_2李林昊嘉传媒有限公司131000193309129587shichao@example.net15872567938430.4950491992-05-08 23:04:30835
台湾省N2020_3王玉华商软冠联网络有限公司340822198708022149lilei@example.com18651489092350.3400371990-02-22 12:35:34589
天津市N2020_4赵平商软冠联传媒有限公司33070219791019772Xshenyong@example.net18027050254410.5781362013-12-02 20:31:27922
data2  = data.set_index(['省份','姓名'])
data2.head()
编号性别公司身份证号邮箱手机号年龄完成率日期销售
省份姓名
四川省范金凤N2020_0方正科技信息有限公司320401200112288520syang@example.net13104093059330.3774412009-06-28 16:36:39488
北京市李平N2020_1东方峻景科技有限公司623001196812267643nayao@example.com14558214788430.0642512009-11-25 07:11:24616
福建省李林N2020_2昊嘉传媒有限公司131000193309129587shichao@example.net15872567938430.4950491992-05-08 23:04:30835
台湾省王玉华N2020_3商软冠联网络有限公司340822198708022149lilei@example.com18651489092350.3400371990-02-22 12:35:34589
天津市赵平N2020_4商软冠联传媒有限公司33070219791019772Xshenyong@example.net18027050254410.5781362013-12-02 20:31:27922

重置索引丨reset_index() 丨★

data1.reset_index().head()
省份编号姓名性别公司身份证号邮箱手机号年龄完成率日期销售
0四川省N2020_0范金凤方正科技信息有限公司320401200112288520syang@example.net13104093059330.3774412009-06-28 16:36:39488
1北京市N2020_1李平东方峻景科技有限公司623001196812267643nayao@example.com14558214788430.0642512009-11-25 07:11:24616
2福建省N2020_2李林昊嘉传媒有限公司131000193309129587shichao@example.net15872567938430.4950491992-05-08 23:04:30835
3台湾省N2020_3王玉华商软冠联网络有限公司340822198708022149lilei@example.com18651489092350.3400371990-02-22 12:35:34589
4天津市N2020_4赵平商软冠联传媒有限公司33070219791019772Xshenyong@example.net18027050254410.5781362013-12-02 20:31:27922
data2.reset_index(level=1).head()
姓名编号性别公司身份证号邮箱手机号年龄完成率日期销售
省份
四川省范金凤N2020_0方正科技信息有限公司320401200112288520syang@example.net13104093059330.3774412009-06-28 16:36:39488
北京市李平N2020_1东方峻景科技有限公司623001196812267643nayao@example.com14558214788430.0642512009-11-25 07:11:24616
福建省李林N2020_2昊嘉传媒有限公司131000193309129587shichao@example.net15872567938430.4950491992-05-08 23:04:30835
台湾省王玉华N2020_3商软冠联网络有限公司340822198708022149lilei@example.com18651489092350.3400371990-02-22 12:35:34589
天津市赵平N2020_4商软冠联传媒有限公司33070219791019772Xshenyong@example.net18027050254410.5781362013-12-02 20:31:27922

更新索引丨reindex() 丨★

data3 = data.head()
data3
编号姓名性别省份公司身份证号邮箱手机号年龄完成率日期销售
0N2020_0范金凤四川省方正科技信息有限公司320401200112288520syang@example.net13104093059330.3774412009-06-28 16:36:39488
1N2020_1李平北京市东方峻景科技有限公司623001196812267643nayao@example.com14558214788430.0642512009-11-25 07:11:24616
2N2020_2李林福建省昊嘉传媒有限公司131000193309129587shichao@example.net15872567938430.4950491992-05-08 23:04:30835
3N2020_3王玉华台湾省商软冠联网络有限公司340822198708022149lilei@example.com18651489092350.3400371990-02-22 12:35:34589
4N2020_4赵平天津市商软冠联传媒有限公司33070219791019772Xshenyong@example.net18027050254410.5781362013-12-02 20:31:27922
data3.reindex([2,3,0,1,4],fill_value=0) #fill_value 当不存在时显示0
编号姓名性别省份公司身份证号邮箱手机号年龄完成率日期销售
2N2020_2李林福建省昊嘉传媒有限公司131000193309129587shichao@example.net15872567938430.4950491992-05-08 23:04:30835
3N2020_3王玉华台湾省商软冠联网络有限公司340822198708022149lilei@example.com18651489092350.3400371990-02-22 12:35:34589
0N2020_0范金凤四川省方正科技信息有限公司320401200112288520syang@example.net13104093059330.3774412009-06-28 16:36:39488
1N2020_1李平北京市东方峻景科技有限公司623001196812267643nayao@example.com14558214788430.0642512009-11-25 07:11:24616
4N2020_4赵平天津市商软冠联传媒有限公司33070219791019772Xshenyong@example.net18027050254410.5781362013-12-02 20:31:27922

索引排序丨sort_index()

data1.sort_index(ascending=False).head()
编号姓名性别公司身份证号邮箱手机号年龄完成率日期销售
省份
黑龙江省N2020_75刘鑫超艺传媒有限公司210701194711181795zhaojun@example.com13228202589470.9748121974-12-29 11:36:42155
黑龙江省N2020_55蒋文惠派国际公司信息有限公司52272619661221162Xfangchang@example.com18636530837420.3049911971-10-22 00:37:03259
黑龙江省N2020_18郑敏彩虹信息有限公司410200194702267611gyin@example.org15646946384460.3814121997-04-21 04:29:16132
香港特别行政区N2020_39高洁商软冠联信息有限公司50011519990112238Xlixue@example.org13209584706340.0170301999-07-18 21:25:45699
香港特别行政区N2020_19梁雪银嘉科技有限公司330825197106213864yan14@example.org13488583474380.9253571981-10-04 09:20:40994
data2.sort_index(level=1,ascending=False).head()
编号性别公司身份证号邮箱手机号年龄完成率日期销售
省份姓名
台湾省黄燕N2020_87易动力传媒有限公司370829199012030735yong70@example.com13242323364310.4713651985-08-17 18:52:10408
西藏自治区黄峰N2020_13良诺科技有限公司510801193903095981leifu@example.net15660156361360.9868892016-03-23 15:45:29291
宁夏回族自治区黄丽丽N2020_11华远软件传媒有限公司510114196409150161tanchao@example.org18137834227370.8858271987-08-14 18:46:45382
香港特别行政区高洁N2020_39商软冠联信息有限公司50011519990112238Xlixue@example.org13209584706340.0170301999-07-18 21:25:45699
江苏省马彬N2020_45凌云信息有限公司36073319691231944Xqiang04@example.net13578076912430.5737761990-01-29 02:45:42160
data2.sort_index(level=[0,1],ascending=[False,False]).head()
编号性别公司身份证号邮箱手机号年龄完成率日期销售
省份姓名
黑龙江省郑敏N2020_18彩虹信息有限公司410200194702267611gyin@example.org15646946384460.3814121997-04-21 04:29:16132
蒋文N2020_55惠派国际公司信息有限公司52272619661221162Xfangchang@example.com18636530837420.3049911971-10-22 00:37:03259
刘鑫N2020_75超艺传媒有限公司210701194711181795zhaojun@example.com13228202589470.9748121974-12-29 11:36:42155
香港特别行政区高洁N2020_39商软冠联信息有限公司50011519990112238Xlixue@example.org13209584706340.0170301999-07-18 21:25:45699
梁雪N2020_19银嘉科技有限公司330825197106213864yan14@example.org13488583474380.9253571981-10-04 09:20:40994

数据筛选

# 模拟数据
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')

筛选列 丨★★

# 筛选1列
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刘桂花辽宁省

筛选行

# 1个条件筛选
data[data['省份']=='北京市']
编号姓名性别省份公司身份证号邮箱手机号年龄完成率日期销售
1N2020_1李平北京市东方峻景科技有限公司623001196812267643nayao@example.com14558214788460.0579502009-11-25 07:11:24616
23N2020_23李慧北京市巨奥信息有限公司450223196310134685bsong@example.com18597786292340.7107521971-10-30 04:34:58785
# 多条件筛选
data[(data['性别']=='男')&(data['省份']=='四川省')]
编号姓名性别省份公司身份证号邮箱手机号年龄完成率日期销售
29N2020_29温云四川省创汇传媒有限公司411621195006187174jun93@example.org15764016109300.0373301995-07-27 08:30:33005
52N2020_52陈秀梅四川省艾提科信科技有限公司621022196409096901fuxia@example.net18797029868360.7357642014-02-16 02:19:28005
56N2020_56徐艳四川省超艺网络有限公司230404195602088429ntang@example.org15730053639360.2856401977-07-27 07:27:07782
71N2020_71韩凤英四川省网新恒天网络有限公司152202194306033785cfeng@example.net13699762247390.0898122019-06-26 04:44:02760
根据内容精确匹配丨isin() 丨★★
# isin()
data[data['省份'].isin(['山东省','四川省'])].head()
编号姓名性别省份公司身份证号邮箱手机号年龄完成率日期销售
0N2020_0范金凤四川省方正科技信息有限公司320401200112288520syang@example.net13104093059410.7009302009-06-28 16:36:39488
8N2020_8刘桂花山东省恩悌网络有限公司230184197702140647guochao@example.net13310655117340.5167892015-09-29 16:21:28439
29N2020_29温云四川省创汇传媒有限公司411621195006187174jun93@example.org15764016109300.0373301995-07-27 08:30:33005
35N2020_35宋楠山东省恒聪百汇网络有限公司370213199602238217yeming@example.com13027921428470.2531791980-10-16 17:48:44451
52N2020_52陈秀梅四川省艾提科信科技有限公司621022196409096901fuxia@example.net18797029868360.7357642014-02-16 02:19:28005
# isin()
data[data['年龄'].isin([35,36,38])].head()
编号姓名性别省份公司身份证号邮箱手机号年龄完成率日期销售
4N2020_4赵平天津市商软冠联传媒有限公司33070219791019772Xshenyong@example.net18027050254380.1603482013-12-02 20:31:27922
5N2020_5陈桂花河南省华泰通安科技有限公司51343219440729157Xtianyan@example.com15115129137350.1766352011-04-05 20:09:54006
6N2020_6韦亮福建省合联电子科技有限公司610730195403213354yinmin@example.org13680169513360.7135551988-09-08 02:15:10769
7N2020_7钟瑜新疆维吾尔自治区浙大万朋传媒有限公司632823199206261862qiang32@example.net15636503787350.6155022010-03-08 11:00:32435
10N2020_10林秀兰吉林省恩悌科技有限公司532524196805192224tao83@example.com14522841055380.5354691970-02-01 06:55:39602
根据内容模糊匹配丨str.contains() 丨★★
# str.contains()
data[data['公司'].str.contains('动力')].head()
编号姓名性别省份公司身份证号邮箱手机号年龄完成率日期销售
21N2020_21方琳青海省易动力网络有限公司130481196911267803kshao@example.com14509729550320.7547242017-12-27 19:42:26277
37N2020_37王梅辽宁省易动力科技有限公司370812194801193481yan07@example.org18574736528460.7063311972-03-16 17:56:14810
62N2020_62陈梅四川省易动力网络有限公司341126199909224292naduan@example.org13818527086340.9696331970-02-04 14:33:40411
87N2020_87黄燕台湾省易动力传媒有限公司370829199012030735yong70@example.com13242323364440.9754041985-08-17 18:52:10408
94N2020_94余建西藏自治区易动力网络有限公司500120197803071859yzhang@example.com13304313249320.0551062008-05-29 04:44:57194
# str.contains()
data[data['公司'].str.contains('计算机|动力')].head()
编号姓名性别省份公司身份证号邮箱手机号年龄完成率日期销售
21N2020_21方琳青海省易动力网络有限公司130481196911267803kshao@example.com14509729550320.7547242017-12-27 19:42:26277
37N2020_37王梅辽宁省易动力科技有限公司370812194801193481yan07@example.org18574736528460.7063311972-03-16 17:56:14810
62N2020_62陈梅四川省易动力网络有限公司341126199909224292naduan@example.org13818527086340.9696331970-02-04 14:33:40411
70N2020_70徐涛四川省晖来计算机信息有限公司441201195906202227guiying06@example.com13422409521360.3537851994-04-02 12:23:33743
87N2020_87黄燕台湾省易动力传媒有限公司370829199012030735yong70@example.com13242323364440.9754041985-08-17 18:52:10408
根据字符串长度 丨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
0HELLO
1world
2China
3Python
4
510
6100
7字符串
8data
9NaN
# #所有字符都是数字或者字母
df['字符串数值或者字母'] = df['值'].str.isalnum() 
df
字符串数值或者字母
0HELLOTrue
1worldTrue
2ChinaTrue
3PythonTrue
4False
510True
6100NaN
7字符串True
8dataTrue
9NaNNaN
#所有字符都是字母  
df['字母'] = df['值'].str.isalpha()
df
字符串数值或者字母字母
0HELLOTrueTrue
1worldTrueTrue
2ChinaTrueTrue
3PythonTrueTrue
4FalseFalse
510TrueFalse
6100NaNNaN
7字符串TrueTrue
8dataTrueTrue
9NaNNaNNaN
#所有字符都是数字  
df['字符串数字'] = df['值'].str.isdigit() 
df
字符串数值或者字母字母字符串数字
0HELLOTrueTrueFalse
1worldTrueTrueFalse
2ChinaTrueTrueFalse
3PythonTrueTrueFalse
4FalseFalseFalse
510TrueFalseTrue
6100NaNNaNNaN
7字符串TrueTrueFalse
8dataTrueTrueFalse
9NaNNaNNaNNaN
# 所有字符都是小写
df['小写字母'] = df['值'].str.islower() 
df
字符串数值或者字母字母字符串数字小写字母
0HELLOTrueTrueFalseFalse
1worldTrueTrueFalseTrue
2ChinaTrueTrueFalseFalse
3PythonTrueTrueFalseFalse
4FalseFalseFalseFalse
510TrueFalseTrueFalse
6100NaNNaNNaNNaN
7字符串TrueTrueFalseFalse
8dataTrueTrueFalseTrue
9NaNNaNNaNNaNNaN
# 所有字符都为大写
df['大写字母'] = df['值'].str.isupper() 
df
字符串数值或者字母字母字符串数字小写字母大写字母
0HELLOTrueTrueFalseFalseTrue
1worldTrueTrueFalseTrueFalse
2ChinaTrueTrueFalseFalseFalse
3PythonTrueTrueFalseFalseFalse
4FalseFalseFalseFalseFalse
510TrueFalseTrueFalseFalse
6100NaNNaNNaNNaNNaN
7字符串TrueTrueFalseFalseFalse
8dataTrueTrueFalseTrueFalse
9NaNNaNNaNNaNNaNNaN
# 所有单词都是首字母大写
df['首字母大写'] = df['值'].str.istitle() 
df
字符串数值或者字母字母字符串数字小写字母大写字母首字母大写
0HELLOTrueTrueFalseFalseTrueFalse
1worldTrueTrueFalseTrueFalseFalse
2ChinaTrueTrueFalseFalseFalseTrue
3PythonTrueTrueFalseFalseFalseTrue
4FalseFalseFalseFalseFalseFalse
510TrueFalseTrueFalseFalseFalse
6100NaNNaNNaNNaNNaNNaN
7字符串TrueTrueFalseFalseFalseFalse
8dataTrueTrueFalseTrueFalseFalse
9NaNNaNNaNNaNNaNNaNNaN
# 所有字符都是空白字
df['空格'] = df['值'].str.isspace() 
df
字符串数值或者字母字母字符串数字小写字母大写字母首字母大写空格
0HELLOTrueTrueFalseFalseTrueFalseFalse
1worldTrueTrueFalseTrueFalseFalseFalse
2ChinaTrueTrueFalseFalseFalseTrueFalse
3PythonTrueTrueFalseFalseFalseTrueFalse
4FalseFalseFalseFalseFalseFalseTrue
510TrueFalseTrueFalseFalseFalseFalse
6100NaNNaNNaNNaNNaNNaNNaN
7字符串TrueTrueFalseFalseFalseFalseFalse
8dataTrueTrueFalseTrueFalseFalseFalse
9NaNNaNNaNNaNNaNNaNNaNNaN
分组后筛选丨groupby() 丨★★
# 分组后筛选每组第1个
data.sort_values(by='年龄').groupby('省份',as_index=False).first().head()
省份编号姓名性别公司身份证号邮箱手机号年龄完成率日期销售
0上海市N2020_73卢丹盟新科技有限公司370202194101232333guiyingshi@example.org15682747497350.6910842019-10-02 12:23:51761
1云南省N2020_97陈帅商软冠联网络有限公司46902319400324717Xcuimin@example.net14529122727370.6357852007-05-29 09:35:04564
2内蒙古自治区N2020_47谭利时刻网络有限公司140321194101147472yan48@example.org13363990254320.9104022011-11-03 00:34:49373
3北京市N2020_23李慧巨奥信息有限公司450223196310134685bsong@example.com18597786292340.7107521971-10-30 04:34:58785
4台湾省N2020_61曹凯南康科技有限公司150502196806098191xiulanpan@example.org13262601832310.6220771983-02-03 04:28:03913
data.groupby('省份',as_index=False).apply(lambda x: x[x['完成率']>0.95]).head()  #为什么两个索引
编号姓名性别省份公司身份证号邮箱手机号年龄完成率日期销售
487N2020_87黄燕台湾省易动力传媒有限公司370829199012030735yong70@example.com13242323364440.9754041985-08-17 18:52:10408
533N2020_33冯璐吉林省太极科技有限公司411381195107138515pjia@example.org13982410034310.9818352017-07-01 01:55:38507
662N2020_62陈梅四川省易动力网络有限公司341126199909224292naduan@example.org13818527086340.9696331970-02-04 14:33:40411
951N2020_51李伟安徽省商软冠联网络有限公司530701193409160440taoduan@example.org15322916084340.9820042006-04-29 07:34:08977
1596N2020_96李淑华江西省襄樊地球村信息有限公司542431194904214928xiulan99@example.org13447067886310.9669891977-11-06 19:40:07529
loc()
data.loc[data['省份']=='四川省'].head()
编号姓名性别省份公司身份证号邮箱手机号年龄完成率日期销售
0N2020_0范金凤四川省方正科技信息有限公司320401200112288520syang@example.net13104093059410.7009302009-06-28 16:36:39488
29N2020_29温云四川省创汇传媒有限公司411621195006187174jun93@example.org15764016109300.0373301995-07-27 08:30:33005
52N2020_52陈秀梅四川省艾提科信科技有限公司621022196409096901fuxia@example.net18797029868360.7357642014-02-16 02:19:28005
56N2020_56徐艳四川省超艺网络有限公司230404195602088429ntang@example.org15730053639360.2856401977-07-27 07:27:07782
62N2020_62陈梅四川省易动力网络有限公司341126199909224292naduan@example.org13818527086340.9696331970-02-04 14:33:40411
data.loc[data['年龄']>35].head()
编号姓名性别省份公司身份证号邮箱手机号年龄完成率日期销售
0N2020_0范金凤四川省方正科技信息有限公司320401200112288520syang@example.net13104093059410.7009302009-06-28 16:36:39488
1N2020_1李平北京市东方峻景科技有限公司623001196812267643nayao@example.com14558214788460.0579502009-11-25 07:11:24616
3N2020_3王玉华台湾省商软冠联网络有限公司340822198708022149lilei@example.com18651489092490.4495151990-02-22 12:35:34589
4N2020_4赵平天津市商软冠联传媒有限公司33070219791019772Xshenyong@example.net18027050254380.1603482013-12-02 20:31:27922
6N2020_6韦亮福建省合联电子科技有限公司610730195403213354yinmin@example.org13680169513360.7135551988-09-08 02:15:10769
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()
编号姓名性别
2N2020_2李林
3N2020_3王玉华
5N2020_5陈桂花
data.iloc[2:,[0,1,2]].head()
编号姓名性别
2N2020_2李林
3N2020_3王玉华
4N2020_4赵平
5N2020_5陈桂花
6N2020_6韦亮
data.iloc[[2,3,5],:].head()
编号姓名性别省份公司身份证号邮箱手机号年龄完成率日期销售
2N2020_2李林福建省昊嘉传媒有限公司131000193309129587shichao@example.net15872567938310.6483311992-05-08 23:04:30835
3N2020_3王玉华台湾省商软冠联网络有限公司340822198708022149lilei@example.com18651489092490.4495151990-02-22 12:35:34589
5N2020_5陈桂花河南省华泰通安科技有限公司51343219440729157Xtianyan@example.com15115129137350.1766352011-04-05 20:09:54006

数据排序

# 示例数据
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
animalsizeweightadult
0catS8False
1dogS10False
2catM11False
3fishM1False
4dogM20False
5catL12True
6catL12True

单个字段排序

df.sort_values('animal')  # 默认升序
df.sort_values('animal',ascending=False)  # 默认升序
animalsizeweightadult
3fishM1False
1dogS10False
4dogM20False
0catS8False
2catM11False
5catL12True
6catL12True

多个字段排序

df.sort_values(['animal','weight'],ascending=[True,False])
df.sort_values(['animal','weight'],ascending=False).head()
animalsizeweightadult
3fishM1False
4dogM20False
1dogS10False
5catL12True
6catL12True

日期数据

生成日期序列

# pd.date_range()  时间戳
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')
# pd.period_range()  时间周期
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()
日期
02020-3-1082
12020-3-1192
22020-3-1289
32020-3-1383
42020-3-1487
df.dtypes
日期    object
值      int32
dtype: object
# 方式1
df['日期_to_datetime'] = pd.to_datetime(df['日期'])  
# errors='ignore'无法转换时显示原始值,结果格式不变
# errors = 'coerce':无法转换时,返回错误值,结果为时间格式
df
日期日期_to_datetime
02020-3-10822020-03-10
12020-3-11922020-03-11
22020-3-12892020-03-12
32020-3-13832020-03-13
42020-3-14872020-03-14
52020-3-15892020-03-15
62020-3-16922020-03-16
72020-3-17852020-03-17
82020-3-18872020-03-18
92020-3-19882020-03-19
# 方式2
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
02020-3-10822020-03-102020-03-102020-03-10
12020-3-11922020-03-112020-03-112020-03-11
22020-3-12892020-03-122020-03-122020-03-12
32020-3-13832020-03-132020-03-132020-03-13
42020-3-14872020-03-142020-03-142020-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
02009-04-30 04:12:391990-04-20 10:50:04
11972-06-24 22:03:042016-12-18 11:20:24
21978-02-20 20:28:272018-02-10 03:32:35
31971-09-20 13:10:152014-06-06 21:00:06
42012-09-25 11:13:481970-03-09 07:51:55
data['间隔'] = data['日期1'] - data['日期2']
data['间隔'] = data['间隔'].apply(lambda x: x.days)
data
日期1日期2间隔
02009-04-30 04:12:391990-04-20 10:50:046949
11972-06-24 22:03:042016-12-18 11:20:24-16248
21978-02-20 20:28:272018-02-10 03:32:35-14600
31971-09-20 13:10:152014-06-06 21:00:06-15601
42012-09-25 11:13:481970-03-09 07:51:5515541
51987-10-02 22:19:302004-05-07 06:11:36-6062
61992-03-10 12:30:021981-12-14 19:46:383738
71977-02-15 06:07:522016-03-19 14:59:26-14278
82008-10-18 14:07:051995-07-18 02:32:494841
91970-05-28 23:34:241990-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
02009-04-30 04:12:391990-04-20 10:50:0469493978
11972-06-24 22:03:042016-12-18 11:20:24-1624817436
21978-02-20 20:28:272018-02-10 03:32:35-1460015369
31971-09-20 13:10:152014-06-06 21:00:06-1560117714
42012-09-25 11:13:481970-03-09 07:51:55155412734

格式化丨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()
编号姓名性别省份公司身份证号邮箱手机号年龄完成率日期销售
0N2020_0范金凤四川省方正科技信息有限公司320401200112288520syang@example.net13104093059410.7009302009-06-28 16:36:39488
1N2020_1李平北京市东方峻景科技有限公司623001196812267643nayao@example.com14558214788460.0579502009-11-25 07:11:24616
2N2020_2李林福建省昊嘉传媒有限公司131000193309129587shichao@example.net15872567938310.6483311992-05-08 23:04:30835
3N2020_3王玉华台湾省商软冠联网络有限公司340822198708022149lilei@example.com18651489092490.4495151990-02-22 12:35:34589
4N2020_4赵平天津市商软冠联传媒有限公司33070219791019772Xshenyong@example.net18027050254380.1603482013-12-02 20:31:27922
from datetime import datetime
data['日期_re'] = [datetime.strftime(x,'%Y-%m-%d') for x in data['日期']]
data.head()
编号姓名性别省份公司身份证号邮箱手机号年龄完成率日期销售日期_re
0N2020_0范金凤四川省方正科技信息有限公司320401200112288520syang@example.net13104093059410.7009302009-06-28 16:36:394882009-06-28
1N2020_1李平北京市东方峻景科技有限公司623001196812267643nayao@example.com14558214788460.0579502009-11-25 07:11:246162009-11-25
2N2020_2李林福建省昊嘉传媒有限公司131000193309129587shichao@example.net15872567938310.6483311992-05-08 23:04:308351992-05-08
3N2020_3王玉华台湾省商软冠联网络有限公司340822198708022149lilei@example.com18651489092490.4495151990-02-22 12:35:345891990-02-22
4N2020_4赵平天津市商软冠联传媒有限公司33070219791019772Xshenyong@example.net18027050254380.1603482013-12-02 20:31:279222013-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()
编号姓名性别省份公司身份证号邮箱手机号年龄完成率日期销售
0N2020_0范金凤四川省方正科技信息有限公司320401200112288520syang@example.net13104093059410.7009302009-06-28 16:36:39488
1N2020_1李平北京市东方峻景科技有限公司623001196812267643nayao@example.com14558214788460.0579502009-11-25 07:11:24616
2N2020_2李林福建省昊嘉传媒有限公司131000193309129587shichao@example.net15872567938310.6483311992-05-08 23:04:30835
3N2020_3王玉华台湾省商软冠联网络有限公司340822198708022149lilei@example.com18651489092490.4495151990-02-22 12:35:34589
4N2020_4赵平天津市商软冠联传媒有限公司33070219791019772Xshenyong@example.net18027050254380.1603482013-12-02 20:31:27922
# 设置日期索引
data.set_index('日期',inplace=True)
data.head()
编号姓名性别省份公司身份证号邮箱手机号年龄完成率销售
日期
2009-06-28 16:36:39N2020_0范金凤四川省方正科技信息有限公司320401200112288520syang@example.net13104093059410.700930488
2009-11-25 07:11:24N2020_1李平北京市东方峻景科技有限公司623001196812267643nayao@example.com14558214788460.057950616
1992-05-08 23:04:30N2020_2李林福建省昊嘉传媒有限公司131000193309129587shichao@example.net15872567938310.648331835
1990-02-22 12:35:34N2020_3王玉华台湾省商软冠联网络有限公司340822198708022149lilei@example.com18651489092490.449515589
2013-12-02 20:31:27N2020_4赵平天津市商软冠联传媒有限公司33070219791019772Xshenyong@example.net18027050254380.160348922
日期筛选 丨★★★
# 按日期筛选
data['2019']
编号姓名性别省份公司身份证号邮箱手机号年龄完成率销售
日期
2019-07-16 12:20:13N2020_22陆岩浙江省毕博诚科技有限公司542522198007113665yangsun@example.com14576069728380.566517262
2019-12-30 06:36:17N2020_36伍荣广西壮族自治区富罳网络有限公司230882197007262293dchang@example.com18200579436460.773116674
2019-11-13 07:39:06N2020_57刘红梅宁夏回族自治区华成育卓网络有限公司431102193803033408weiye@example.net13235351585360.368342436
2019-06-26 04:44:02N2020_71韩凤英四川省网新恒天网络有限公司152202194306033785cfeng@example.net13699762247390.089812760
2019-10-02 12:23:51N2020_73卢丹上海市盟新科技有限公司370202194101232333guiyingshi@example.org15682747497350.691084761
# 按日期筛选
data['2019-11']  # 不能写成201911
编号姓名性别省份公司身份证号邮箱手机号年龄完成率销售
日期
2019-11-13 07:39:06N2020_57刘红梅宁夏回族自治区华成育卓网络有限公司431102193803033408weiye@example.net13235351585360.368342436
# 按日期筛选
data['2019-11-01' : '2019-11-20']
编号姓名性别省份公司身份证号邮箱手机号年龄完成率销售
日期
2019-11-13 07:39:06N2020_57刘红梅宁夏回族自治区华成育卓网络有限公司431102193803033408weiye@example.net13235351585360.368342436
改变日期数据频率丨to_period()
data.to_period('M').head()  # 只针对索引
编号姓名性别省份公司身份证号邮箱手机号年龄完成率销售
日期
2009-06N2020_0范金凤四川省方正科技信息有限公司320401200112288520syang@example.net13104093059410.700930488
2009-11N2020_1李平北京市东方峻景科技有限公司623001196812267643nayao@example.com14558214788460.057950616
1992-05N2020_2李林福建省昊嘉传媒有限公司131000193309129587shichao@example.net15872567938310.648331835
1990-02N2020_3王玉华台湾省商软冠联网络有限公司340822198708022149lilei@example.com18651489092490.449515589
2013-12N2020_4赵平天津市商软冠联传媒有限公司33070219791019772Xshenyong@example.net18027050254380.160348922
data.to_period('Y').reset_index().head()
日期编号姓名性别省份公司身份证号邮箱手机号年龄完成率销售
02009N2020_0范金凤四川省方正科技信息有限公司320401200112288520syang@example.net13104093059410.700930488
12009N2020_1李平北京市东方峻景科技有限公司623001196812267643nayao@example.com14558214788460.057950616
21992N2020_2李林福建省昊嘉传媒有限公司131000193309129587shichao@example.net15872567938310.648331835
31990N2020_3王玉华台湾省商软冠联网络有限公司340822198708022149lilei@example.com18651489092490.449515589
42013N2020_4赵平天津市商软冠联传媒有限公司33070219791019772Xshenyong@example.net18027050254380.160348922

本节重点

  • 缺失值填充
  • 缺失值删除:subset参数
  • 重复值删除:subset参数
  • 更改列名:columns参数
  • 替换
  • 排序
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

python技巧(数据分析及可视化)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值