python数据清理时的常⽤函数
1 drop
删除表中的某⼀⾏或者某⼀列更明智的⽅法是使⽤drop,它不改变原有的df中的数据,⽽是可选择性的返回另⼀个dataframe来存放删除
后的数据。
drop函数的使⽤:
(1)删除⾏、列
print(frame.drop(['a']))
print(frame.drop(['b'], axis = 1))#drop函数默认删除⾏,列需要加axis = 1
(2)inplace参数
DF.drop('column_name', axis=1);
DF.drop('column_name',axis=1, inplace=True)
DF.drop([DF.columns[[0,1, 3]]], axis=1, inplace=True)
对原数组作出修改并返回⼀个新数组,往往都有⼀个 inplace可选参数。如果⼿动设定为True(默认为False),那么原数组直接就被替
换。也就是说,采⽤inplace=True之后,原数组名对应的内存值直接改变(如2和3情况所⽰);
⽽采⽤inplace=False之后,原数组名对应的内存值并不改变,需要将新的结果赋给⼀个新的数组或者覆盖原数组的内存位置(如1情况所⽰)。
DataFrame.drop(labels=None, axis=0, index=None, columns=None, level=None, inplace=False, errors='raise')
3 dropna(pandas类型)
缺失值处理函数dropna:去除数据结构中值为空得数据。
se1=pd.Series([4,NaN,8,NaN,5])
print(se1)
se1.dropna()
默认滤除所有包含NaN:
df1.dropna()
传⼊**how=‘all’**滤除全为NaN的⾏:
df1.dropna(how='all')
传⼊axis=1滤除列:
df1.dropna(axis=1)
df1.dropna(axis=1,how="all")
传⼊thresh=n保留⾄少有n个⾮NaN数据的⾏:
df1.dropna(thresh=1)
4 pd.merge
merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), copy=True, ind
left,right就是要连接的两个dataframe。
how就是连接的⽅法
inner:内连接,即主标签相同的就留下
全连接:即把a,b集放在⼀起,没有的就是NaN
<(a,b,how='outer')
左连接,左边取全部,右边取部分
<(a,b,how='left')
右连接,右边取全部,左边取部分
<(a,b,how='right')
left_on,和right_on主要就是键名不同的话,就指定连接的键名
如果两个DataFrame的左右连接键的列名不⼀样,可以⽤left_on,right_on来进⾏指定
<(df3,df4,left_on='lkey',right_on='rkey') ### 内连接,默认how='inner'
<(df3,df4,left_on='lkey',right_on='lkey',how='outer') ### 全连接
<(df3,df4,left_on='lkey',right_on='rkey',how='left') ### 左连接
<(df3,df4,left_on='lkey',right_on='rkey',how='right') ### 右连接
5 sort_values
pandas排序的⽅法有很多,sort_values表⽰根据某⼀列排序
pd.sort_values("xxx",inplace=True)
表⽰pd按照xxx这个字段排序,inplace默认为False,如果该值为False,那么原来的pd顺序没变,只是返回的是排序的
# 参数
DataFrame.sort_values(by, axis=0, ascending=True, inplace=False, kind='quicksort', na_position='last')
#### 参数说明
axis:{0 or ‘index’, 1 or ‘columns’}, default 0,默认按照索引排序,即纵向排序,如果为1,则是横向排序
by:str or list of str;如果axis=0,那么by="列名";如果axis=1,那么by="⾏名";
ascending:布尔型,True则升序,可以是[True,False],即第⼀字段升序,第⼆个降序
inplace:布尔型,是否⽤排序后的数据框替换现有的数据框
kind:排序⽅法,{‘quicksort’, ‘mergesort’, ‘heapsort’}, default ‘quicksort’。似乎不⽤太关⼼
na_position : {‘first’, ‘last’}, default ‘last’,默认缺失值排在最后⾯
6 shape
shape():读取矩阵长度,如shape[0]是读取矩阵第⼀维的长度。
⼀般数据清洗中⽤shape[0]读取dataframe的长度 相当于len⽤法。
7 np.where
第⼀种⽤法:np.where(conditions,x,y)
基于条件condition,返回值来⾃x或者y.
if (condituons成⽴):
数组变x
else:
数组变y
第⼆种⽤法:
⾸先强调⼀下,where()函数对于不同的输⼊,返回的只是不同的。
1当数组是⼀维数组时,返回的值是⼀维的索引,所以只有⼀组索引数组
2当数组是⼆维数组时,满⾜条件的数组值返回的是值的位置索引,因此会有两组索引数组来表⽰值的位置
in:b=np.arange(10)
out:array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
in:np.where(b>5)
out:(array([6, 7, 8, 9], dtype=int64),)
8 isnull(pandas类型)
python pandas判断缺失值⼀般采⽤ isnull(),⽣成的是所有数据的true/false矩阵
1 df.isnull()元素级别的判断,把对应的所有元素的位置都列出来,元素为空或者NA就显⽰True,否则就是False
2 df.isnull().any()列级别的判断,只要该列有为空或者NA的元素,就为True,否则False
3 df[df.isnull().values==True] 可以只显⽰存在缺失值的⾏列,清楚的确定缺失值的位置。
4 isnull().sum() 将列中为空的个数统计出来
9 shift(pandas类型)
pandas DataFrame.shift()函数可以把数据移动指定的位数
主要⽤于结合上下数据类型 ⽐如实时的,计算每个⼩时该车站进出站⼈数 可以⽤把第n+1⼩时的总⼈数-第n⼩时的总⼈数,就是这个⼩时⾥的进出站⼈数 移动⼀位就可以做这⼀⾏(列)与下⼀⾏(列)的减法了
period参数指定移动的步幅,可以为正为负.axis指定移动的轴,1为⾏,0为列.
如果想让数据都往下移动⼀位:
data2 = data1.shift(axis=0)
如果是在⾏上往右移动⼀位:
data3 = data1.shift(axis=1)
如果想往上或者往左移动,可以指定(periods=-1):
data4 = data1.shift(periods=-1, axis=0)
data4 = data1.shift(periods=-1, axis=1)
10 drop_duplicates
重复数据删除
DataFrame.drop_duplicates(subset=None, keep='first', inplace=False)
参数
subset: 列标签,可选
keep: {‘first’, ‘last’, False}, 默认值 ‘first’
first: 删除第⼀次出现的重复项。
last: 删除重复项,除了最后⼀次出现。
False: 删除所有重复项。
inplace:布尔值,默认为False,是否删除重复项或返回副本
返回: 重复数据删除 : DataFrame
11 fillna
数据清洗之缺失数据填充
功能:使⽤指定的⽅法填充NA / NaN值
参数:value : 变量, 字典, Series, or DataFrame
⽤于填充缺失值(例如0),或者指定为每个索引(对于Series)或列(对于DataFrame)使⽤哪个字典/Serise/DataFrame的值。(不在字典/Series/DataFrame中的值不会被填充)这个值不能是⼀个列表。
method : {‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None}, 默认值 None ; 在Series中使⽤⽅法填充空⽩(‘backfill’, ‘bfill’向前填充,‘pad’, ‘ffill’向后填充)
axis : {0 or ‘index’, 1 or ‘columns’}
inplace : boolean, 默认值 False。如果为Ture,在原地填满。注意:这将修改次对象上的任何其他视图(例如,DataFrame中的列的⽆复制贴⽚)
limit : int, 默认值 None; 如果指定了⽅法,则这是连续的NaN值的前向/后向填充的最⼤数量。 换句话说,如果连续NaN数量超过这个数字,它将只被部分填充。 如果未指定⽅法,则这是沿着整个轴的最⼤数量,其中NaN将被填充。 如果不是⽆,则必须⼤于0。
downcast : dict, 默认是 None; 如果可能的话,把 item->dtype 的字典将尝试向下转换为适当的相等类型的字符串(例如,如果可能的话,从float64到int64)
fillna(self, value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)
print(data.fillna(0)) ### ⽤0填充缺失数据
print(data.an())) ### ⽤每列特征的均值填充缺失数据isnull的用法
print(data.dian())) ### ⽤每列特征的中位数填充缺失数据
print(data.fillna(method='bfill')) ### ⽤相邻后⾯(back)特征填充前⾯空值
print(data.fillna(method='bfill')) ### ⽤相邻前⾯(before)特征填充后⾯空值
values={0:10,1:20,2:30}
print(data.fillna(value=values)) ### ⽤字典对不同的列填充不同的缺失数据
12 np.stack()
13 map
map()是 Python 内置的⾼阶函数,它接收⼀个函数 f 和⼀个 list,并通过把函数 f 依次作⽤在 list 的每个元素上,得到⼀个新的 list 并返回。 例如,对于list [1, 2, 3, 4, 5, 6, 7, 8, 9],如果希望把list的每个元素都作平⽅,就可以⽤map()函数。
ls1='ABC'
ls2='abc'
print(list(map(lambda x,y:x+y,ls1,ls2)))
#['Aa', 'Bb', 'Cc']
python中的map()函数是⼀个内置的⾼阶函数,⼀般⽤法是map(function, iterable)。需要传⼊⼀个函数,这个函数可以是内置的,也可以是⾃⼰定义,也可以是匿名函数。第⼆个参数是⼀个可迭代对象,如列表,字符串等等。返回的是⼀个map对象,注意不是列表不能直接输出,可以通过for循环或者list()来显⽰。(python2返回的是列表)
14 any()& all()
any(iterables)和all(iterables)对于检查两个对象相等时⾮常实⽤,但是要注意,any和all是python内置函数,同时numpy也有⾃⼰实现的any和all,功能与python内置的⼀样,只不过把numpy.ndarray类型加进去了。因为python内置的对⾼于1维的ndarray没法理解,所以numpy基于的计算最好⽤numpy⾃⼰实现的any和all
本质上讲,any()实现了或(OR)运算,⽽all()实现了与(AND)运算,如果iterable的所有元素不为0、''、False或者iterable为
空,all(iterable)返回True,否则返回False.
对于any(iterables),如果可迭代对象iterables(⾄于什么是可迭代对象,可关注我的下篇⽂章)中任意存在每⼀个元素为True则返
回True。特例:若可迭代对象为空,⽐如空列表[],则返回False。
对于all(iterables),如果可迭代对象iterables中所有元素都为True则返回True。特例:若可迭代对象为空,⽐如空列表[],则返回True。
all(['a', 'b', 'c', 'd']) #列表list,元素都不为空或0
True
all(['a', 'b', '', 'd']) #列表list,存在⼀个为空的元素
False
all([0, 1,2, 3]) #列表list,存在⼀个为0的元素
False
all(('a', 'b', 'c', 'd')) #元组tuple,元素都不为空或0
True
all(('a', 'b', '', 'd')) #元组tuple,存在⼀个为空的元素
False
all((0, 1,2, 3)) #元组tuple,存在⼀个为0的元素
False
all([]) # 空列表
True
all(()) # 空元组
True
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论