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=Noneaxis=0index=Nonecolumns=Nonelevel=Noneinplace=Falseerrors='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, indicator=False, validate=None)

left,right就是要连接的两个dataframe。
how就是连接的方法
inner:内连接,即主标签相同的就留下

全连接:即把a,b集放在一起,没有的就是NaN

pd.merge(a,b,how='outer')   

左连接,左边取全部,右边取部分

pd.merge(a,b,how='left')

右连接,右边取全部,左边取部分

pd.merge(a,b,how='right')

left_on,和right_on主要就是键名不同的话,就指定连接的键名

如果两个DataFrame的左右连接键的列名不一样,可以用left_on,right_on来进行指定
pd.merge(df3,df4,left_on='lkey',right_on='rkey')   ### 内连接,默认how='inner'
pd.merge(df3,df4,left_on='lkey',right_on='lkey',how='outer')  ### 全连接
pd.merge(df3,df4,left_on='lkey',right_on='rkey',how='left')  ### 左连接
pd.merge(df3,df4,left_on='lkey',right_on='rkey',how='right')  ### 右连接

详细见:https://blog.csdn.net/qq_21840201/article/details/80727504

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.fillna(data.mean()))     ### 用每列特征的均值填充缺失数据
print(data.fillna(data.median()))   ### 用每列特征的中位数填充缺失数据
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()

详细见:https://blog.csdn.net/qq_39521554/article/details/80469666

 

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

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(pandas,总结,python3中的一些小总结)