DataFrame数据的清洗--预处理操作
import pandas as pd
import numpy as np
#DataFrame数据框行或列的删除
#df.drop(labels=None,axis=0,index=None,columns=None,level=None,inplace=False,error="raise")
#labels 表示需要删除的行或列的标签,多行或多列用列表传入数据 labels=["a","b"]
#axis 表示删除的是行或列 如果指定了index或columns参数,那么axis可以不传入。
# index 表示需要删除的行的索引
# columns 表示需要删除的列索引
#inplace 传入bool类型数据,True表示改变原DataFrame,False表示不改变原DataFrame
#使用drop删除行或列时,可以使用条件判断进行删除。
# df.drop(df[(df["a"]=="5")&(df["b"]==6)]) #表示删除df中"a"列中值等于5并且"b"列中值等于6的行数据(由于没有指定axis,默认为0)
##注释:df[df["a"]==5] 表示选择"a"列中值为5对应的行; 先选择"a"这列,然后选择"a"列中值等于5的这行.
df[df["b"]==5]
#DataFrame数据框数据的去重:
df.duplicated(subset=["b","k"]) #默认情况下是判断DataFrame中每行数据是否有重复值,返回bool值的Series;如果传入参数subset= 表示指定对应的columns,返回的是指定列中是否存在重复值的行。
#因此duplicated是横向判断重复值,返回对应的Series数据,在使用是一般是不需要传入subset参数的,需要判断多列是否存在重复值的行,以列表[] 形式传入参数。
'''如果指定了某列,则返回某列的布尔值Series。不写subset参数,则表示对整个df进行判断(判断整个是否存在完全相同的行,如果存在完全相同的行,则该行显示True,
如果两行中的对应的好几列中有一个值不同,则表示不是重复,返回False),则返回整个df的布尔值Series(也是按一列布尔值输出)'''
df.drop_duplicates() #默认情况下对特定的列进行去重,也就是去除指定列中含有重复值的行。
#Df.drop_duplicates(subset=None,keep="first",inplace=False)
'''Subset= " " #用来指定特定的列,默认是所有列。通俗来讲就是指定某列,需要删除某列中含有重复的数据,如果有重复数据,则所在重复数据的整行会被直接删除,相当与是跨行操作。如果SubSet=["A","B"],也就是A和B列对应位置的值相同时才被删除该行,不相同的话就算A中有再多的重复值都不会被删除。
Keep="first" 保留第一次出现的值,"last" 保留最后一次出现的值
Inplace=True /False 是否替换原来的df,默认为False,即不替换。'''
#DataFrame中缺失值的判断 isna() / isnull(),notnull()
df1.isna() #判断df中是否存在缺失值,返回与df相同的布尔类型的DataFrame
df1.isnull() #判断df1中是否存在缺失值。与isna()作用相同。 由于是对每个位置的元素进行判断,因此返回和原来相同的DataFrame布尔值。
#DataFrame缺失值填充fillna()
#df.fillna(value=None,method=None,axis=None,inplace=False,limit=None,downcast=None) #对df中的缺失值进行填充指定的值,method与value不能共存。
# '''value 表示需要用于填充缺失值的值。可以通过字典的方式对不同列的空值填充不同的值,例如:df.fillna({"A":0,"B":1,"C":3} "A"列中的空值填充为0;"B"列的空值填充为1;"C"列中的空值填充为3.
# axis 表示填充的维度,是按照行填充还是按照列进行填充。
# method 表示填充的方法,ffill:用缺失值前面的一个值代替缺失值,如果axis =1,那么就是横向的前面的值替换后面的缺失值,如果axis=0,那么则是上面的值替换下面的缺失值。backfill/bfill,缺失值后面的一个值代替前面的缺失值。注意这个参数不能与value同时出现
# limit 表示确定填充的个数,例如limit=3 表示只填充df中的两个空值。
# inplace 布尔类型,是否改变原df。'''
#DataFrame值的替换 replace()
#df.replace(to_replace=None,value=None,inplace=False,limit=None,regex=False,method="pad",axis=None)
#简单的理解就是需要在df中的某个值替换成另一个值。
# to_replace : 需要被替换的值,可以通过字典来指定将多个值分别进行替换,作用与Series中replace相同。
# value : 用该值来替换to_replace的值。
'''
df.replace({"A":3,"B":"小明"},20) #表示将df的"A"列中对应的3和“B”列中对应的"小明",用20来进行替换。
df.replace(3,"A") #表示将df中value值中存在的3,全部替换成"A"。
df["年龄"].replace(3,"A") #表示只将df中"年龄"对应列中的3,替换成 "A",其他地方的3不会改变。'''
#DataFrame的分组操作 groupby() 返回的是分组后的groupby数据类型。
#df.groupby(by=None,axis=0,level=None,as_index=True,sort=True,group_keys=True,squeeze=<object>,observed=False,dropna=True) #进行数据分组,以及进行组内运算.
# by : 表示需要分组的列。
#axis : 表示是按照行分组还是按照列进行分组。
df["b"].groupby(by=df["k"]).count() #表示按照df中"a"列数据进行分组,并统计个分组后的数据的个数。
df.groupby(by=df["k"]).count() #表示将df按照"k"列进行分组,返回k列中元素分组后的个数,df有多少列,就返回多少列,值都是一样的。因此可以通过如下选择其中需要的列即可:
df.groupby(by=df["b"])["d"].count() #返回分组后d列对应的元素个数返回值。
【内容持续更新... 如果觉得对你有帮助,帮忙点个收藏和关注,谢谢!】