数据处理二

Pandas统计函数
  1. 汇总类统计

    提取所有数字列的统计结果

     df.describe()  #返回各种结果
    

    查看单个Series的数据

     df["key"].mean()  #指定列查平均值
     df["key"].max()   #指定列查最大值
     df["key"].min()   #指定列查最小值
     df["key"]....
    
  2. 唯一去重和按值计数

    唯一性去重(一般用于枚举列、分类列 例如性别、班级等)

     df["班级"].unique()  #会进行去重,最后剩余班级列表
    

    按值计数

     df["班级"].value_counts()  #会按照班级进行计数,最后有将每个班级人数统计出来
    
  3. 相关系数和协方差

    用于判断两个变量之间的相关程度有多大

    协方差矩阵

     df.cov()
    

    相关系数矩阵

     df.corr()  #查看整个相关性,返回一个二维表可以展示所有的关系
     df.["key1"].corr(df["key2"])  #单独查看两列的相关系数
    
Pandas对缺失值的处理
  • isnull 和 notnull:检测是否为空值,df和Series对象均可以使用

    返回布尔类型数据,因此可以使用布尔索引选出空值。

  • dropna:丢弃、删除缺失值

    例:删除全是空值的列

      studf.dropna(axis="columns",how="all",inplace=True)
    
    • axis:删除行还是列,0相当于index,1相当于columns,默认为0
    • how:any表示有空值就删除,all表示全为空值才删除。
    • inplace:如果为True则修改当前df,否则返回新的df,需要变量名接收。
  • fillna:填充空值

    将分数为空的填充为0

      studf.fillna({"分数":0})
      studf.loc[:,"分数"] = studf["分数"].fillna(0)  #等号后面就已经实现了,只是需要赋值到原对象
    

    将姓名为空的缺失值填充

      studf.loc[:,'姓名'] = studf['姓名'].fillna(method="ffill")  #使用上一个不为空数值填充空值
    
    • value:用于填充的值,可以是单个值,或者为字典(key是列名,value是值)
    • method:等于ffill使用前一个不为空的值forword fill;等于bfill使用后一个不为空的值填充backword fill
    • axis:按行填充还是按列填充
    • inplace:如果为True则修改当前df,否则返回新的df,需要变量名接收。
      ####数据排序
  1. Series的排序

     df["字段"].sort_values()  #按照指定字段值进行排序,ascending参数调整顺序
    
    • ascending:默认为True升序的排序,为False降序排序

    • inplace:是否修改原始Series对象

  2. DataFrame的排序

    和Series有一些像,但是需要指定列,按那一列的值进行排序

    例:

     df.sort_values(by="字段")  #按单列值进行排序
     df.sort_values(by=["字段1","字段2","字段3"])  #按多列排序时先按照第一个,若相同则按照下一个排序
     df.sort_values(by=["字段1","字段2"],ascending=[True,False])  #当多列的时候可以使用布尔类型列表分别指定排序方向。
    
    • by:字符串或List<字符串>,单列排序或者多列排序

    • ascending:bool或者List,升序还是降序,如果是list对应by的多列

    • inplace:是否修改原始DataFrame

Pandas字符串处理
  1. 字符串处理函数

    利用.str获取Series的str属性,然后就可以对其使用各种字符串处理函数

    例:

     df["字段1"].str.replace("old","new")  #替换字符串中内容
     df["字段1"].str.isnumeric()  #判断是不是数字,会返回布尔类型列表
     df["字段1"].str.len()  #返回字符串长度
    
  2. 使用startswith、contains等 作条件查询

    startswith 例:

     condition = df["字段1"].str.startswith("指定字符串开头")  #会判断这一列中是否以指定字符串开头,返回布尔型列表,最后使用布尔索引 df[condition] 可以取指定开头的数据
    
  3. 多次str处理的链式操作

    就是多次使用str处理函数,以达到一定效果

  4. 正则表达式处理

    例:

     #问题:怎样将“2018年12月31日”中的年、月、日三个中文字符去除?
     df["字段"].str.replace("年", "").str.replace("月","").str.replace("日", "")  #方法一
     df["字段"].str.replace("[年月日]","")  #方法二,当使用.str后默认开启正则表达式模式
    
重点:Pandas的axis参数怎么理解

如果为单独的行或列操作,例如删除行,修改值 axis = 1表示列,axis = 0表示行

而多行或列的聚合操作,例如平均值,最大值等,axis = 1表示跨列聚合(即每行的结果),axis = 0表示跨行聚合(即每列的结果)
例:

df表:
		A	B	C	D
	0	0	1	2	3
	1	4	5	6	7
	2	8	9	10	11

df.mean(axis=0)

	A    4.0
	B    5.0
	C    6.0
	D    7.0
	dtype: float64  #跨行聚合

def get_sum_value(x):
    return x["A"] + x["B"] + x["C"] + x["D"]
df["sum_value"] = df.apply(get_sum_value, axis=1)

		A	B	C	D	sum_value
	0	0	1	2	3	6
	1	4	5	6	7	22
	2	8	9	10	11	38
Pandas的索引index的用途
  1. 使用index查询

     df.set_index("id",inplace=True,drop=False)    #这一步相当于只是初始化了数据。将id列作为了索引,并且不删除id列
     #例:
     df.loc[2]    #使用index的查询方法,查询所有id为2的数据
     df.loc[df["id"]==2]    #使用的是column的condition查询方法,结果和上面相同
    
  2. 使用index能够提升查询性能

    • 如果index是唯一的,Pandas会使用哈希表优化,查询性能为O(1);
    • 如果index不是唯一的,但是有序,Pandas会使用二分查找算法,查询性能为O(logN);
    • 如果index是完全随机的,那么每次查询都要扫描全表,查询性能为O(N);
  3. 并且能够自动对齐数据(包括Series和DataFrame)

  4. 使用index更多更强大的数据结构支持

    很多强大的索引数据结构

    CategoricalIndex,基于分类数据的Index,提升性能;

    MultiIndex,多维索引,用于groupby多维聚合后结果等;

    DatetimeIndex,时间类型索引,强大的日期和时间的方法支持;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值