zoukankan      html  css  js  c++  java
  • 【Pandas-03】增删改、统计、缺失处理、排序、转置、去重

       

    一、Pandas的增删改

    数据情况:

    1.1 增加

    1)直接赋值

    # 替换掉温度的后缀℃

    df.loc[:, "bWendu"] = df["bWendu"].str.replace("℃", "").astype('int32')

    df.loc[:, "yWendu"] = df["yWendu"].str.replace("℃", "").astype('int32')

    实例:计算温差

    2df.apply方法

    Apply a function along an axis of the DataFrame.

    Objects passed to the function are Series objects whose index is either the DataFrame's index (axis=0) or the DataFrame's columns (axis=1).

    是一种函数方式变编程方法:函数作为一个对象,能作为参数传递给其它参数,并且能作为函数的返回值。例如:

    实例:添加一列温度类型:

    • 如果最高温度大于33度就是高温
    • 低于-10度是低温
    • 否则是常温

    3df.assign方法

    Assign new columns to a DataFrame.

    Returns a new object with all original columns in addition to new ones.

    实例:将温度从摄氏度变成华氏度

    4)按条件选择分组分别赋值

    按条件先选择数据,然后对这部分数据赋值新列

    实例:高低温差大于10度,则认为温差大

    5)增加列名

    df.columns = ['列名1','列名2']

    6)列和行添加

    列添加

    行添加

    使用后面介绍的concat

    1.2 删除

    列删除

    行删除drop

    其实行列删除都可以:

    1、删除某列或某行数据可以用到pandas提供的方法drop

    2、drop方法的用法:drop(labels, axis=0, level=None, inplace=False, errors='raise')

    -- axis为0时表示删除行,axis为1时表示删除列

    3、常用参数如下:

    注意:凡是会对原数组作出修改并返回一个新数组的,往往都有一个 inplace可选参数。如果手动设定为True(默认为False),那么原数组直接就被替换。

    而采用inplace=False之后,原数组名对应的内存值并不改变,需要将新的结果赋给一个新的数组或者覆盖原数组的内存位置。

    1.3 修改

    1)列修改

    2)修改之替换replace

    1)dataframe或series都可以使用,例如

    df.replace('原来的数据','新的数据',inplace=True)

    2)替换的新方式

    ①字典替换(推荐使用)

    例如:

    路径 = 'c:/pandas/替换.xlsx'

    数据 = pd.read_excel(路径)

    字典 = {'A':20,'B':30}

    数据.replace(字典,inplace=True) #字典里的建作为原值,字典里的值作为替换的新值

    ②列表替换

    数据.replace(['A','B'],[20,30],inplace=True)

    进阶:如果想要替换的新值是一样的话:数据.replace(['A','B'],30,inplace=True)

    3)替换部分内容

    数据['城市'] = 数据['城市'].str.replace('城八','市')

    4)正则表达式替换

    数据.replace('[A-Z]',88,regex=True,inplace=True)

    二、Pandas数据统计函数

    2.1 统计函数汇总

    2.2 汇总类统计

    原始数据

    其它统计函数:

    2.3 唯一去重和按值计数

    唯一去重:一般不用于数值列,而是枚举、分类列

    按值计数

    2.4 相关系数和协方差

    用途(超级厉害):

    • 两只股票,是不是同涨同跌?程度多大?正相关还是负相关?
    • 产品销量的波动,跟哪些因素正相关、负相关,程度有多大?

    来自知乎,对于两个变量X、Y:

    • 协方差:衡量同向反向程度,如果协方差为正,说明X,Y同向变化,协方差越大说明同向程度越高;如果协方差为负,说明X,Y反向运动,协方差越小说明反向程度越高。
    • 相关系数:衡量相似度程度,当他们的相关系数为1时,说明两个变量变化时的正向相似度最大,当相关系数为-1时,说明两个变量变化的反向相似度最大

    说明可以通过变量之间的运算来提取特征。

    三、Pandas对缺失值的处理

    Pandas使用这些函数处理缺失值:

    1. isnull和notnull:检测是否是空值,可用于df和series
    2. dropna:丢弃、删除缺失值
    • axis : 删除行还是列,{0 or 'index', 1 or 'columns'}, default 0
    • how : 如果等于any则任何值为空都删除,如果等于all则所有值都为空才删除
    • inplace : 如果为True则修改当前df,否则返回新的df
    1. fillna:填充空值
    • value:用于填充的值,可以是单个值,或者字典(key是列名,value是值)
    • method : 等于ffill使用前一个不为空的值填充forword fill;等于bfill使用后一个不为空的值填充backword fill
    • axis : 按行还是列填充,{0 or 'index', 1 or 'columns'}
    • inplace : 如果为True则修改当前df,否则返回新的df

    3.1 删除函数dropna

    使用DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)

    参数说明:

    • axis:axis=0: 删除包含缺失值的行;axis=1: 删除包含缺失值的列,默认为0,即按照行
    • how: 与axis配合使用

      how='any' :只要有缺失值出现,就删除该行或列

      how='all': 所有的值都缺失,才删除行或列

    • thresh: axis中至少有thresh个非缺失值,否则删除

      比如 axis=0,thresh=10:标识如果该行中非缺失值的数量小于10,将删除这一行

    • subset: list:在哪些列表中查看
    • inplace: 是否在原数据上操作。如果为真,返回None否则返回新的copy,去掉了缺失值

    举例:

    print(数据.dropna()) # 删除有空值的行

    print(数据.dropna(axis=1)) # 删除有空值的列

    print(数据.dropna(how='all')) # 删除所有值为Nan的行

    print(数据.dropna(thresh=2)) # 至少保留两个非缺失值

    print(数据.dropna(subset=['语文','数学'])) # 在哪些列表中查看

    3.2 填充fillna

    DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)

    • value: scalar, dict, Series, or DataFrame dict 可以指定每一行或列用什么值填充
    • method {'backfill', 'bfill', 'pad', 'ffill', None}, default None

      在列上操作

      ffill / pad: 使用前一个值来填充缺失值

      backfill / bfill :使用后一个值来填充缺失值

    • limit 填充的缺失值个数限制。应该不怎么用

    举例:

    print(数据.fillna(0)) # 用常数填充

    print(数据.fillna({'语文':0.1,'数学':0.2,'英语':0.3})) # 通过字典填充不同的常数

       

    实例:特殊Excel的读取、清洗、处理

    文档:

    步骤1:读取

    步骤2:检测空值

       

    步骤3:删除掉全是空值的列

    步骤4:删除掉全是空值的行

    步骤5:将分数列为空的填充为0分

    步骤6:将姓名的缺失值填充

    使用前面的有效值填充,用ffill:forward fill

    步骤7:将清洗好的excel保存

    均值/中位数/众数插补

    df["Age"] = df["Age"].fillna(df["Age"].median()) #中位数,若是均值使用mean,众数使用mode。

       

    四、Pandas数据排序

    1、Series的排序:

    Series.sort_values(ascending=True, inplace=False)

    参数说明:

    • ascending:默认为True升序排序,为False降序排序
    • inplace:是否修改原始Series

    2、DataFrame的排序:

    DataFrame.sort_values(by, axis=0, ascending=True, inplace=False, kind='quicksort', na_position='last')

    参数说明

    • by:字符串或者List<字符串>,单列排序或者多列排序
    • axis:如果axis=0,那么by="列名";如果axis=1,那么by="行号";
    • ascending:True则升序,可以是[True,False],即第一字段升序,第二个降序
    • inplace=True:不创建新的对象,直接对原始对象进行修改;
    • inplace=False:对数据进行修改,创建并返回新的对象承载其修改结果。
    • kind:排序方法,{'quicksort', 'mergesort', 'heapsort'}, default 'quicksort'。似乎不用太关心
    • na_position : {'first', 'last'}, default 'last',默认缺失值排在最后面

    4.1 Series的排序

    4.2 DataFrame的排序

    1)单列排序

    2)多列排序

    还可以多个差异化排序

    五、转置

    import pandas as pd

    路径 = 'c:/pandas/转换.xlsx'

    数据 = pd.read_excel(路径)

    数据2 = pd.DataFrame(数据.values.T,index=数据.columns,columns=数据.index)

    就是使用了numpy内置的矩阵转置方法,这样的操作速度最快。

       

    说明:直接使用:df.T 也可以。

       

    六、重复值处理

    6.1 删除重复:

    DataFrame.drop_duplicates(subset=None, keep='first', inplace=False)

    参数

    subset:用来指定特定的列,可以是多列,默认是所有列

    keep:指定处理重复值的方法:

    first:保留第一次出现的值

    last:保留最后一次出现的值

    False:删除所有重复值,留下没有出现过重复的

    inplace:是直接在原来数据上修改还是保留一个副本

    6.2 提取重复

    DataFrame.duplicated(subset=None, keep='first')

    参数

    subset:用来指定特定的列,可以是多列,默认是所有列

    keep:指定处理重复值的方法:

    first:保留第一次出现的值

    last:保留最后一次出现的值

    False:删除所有重复值,留下没有出现过重复的

    inplace:是直接在原来数据上修改还是保留一个副本

       

    参考文献:

    1. https://pandas.pydata.org/pandas-docs/stable/
  • 相关阅读:
    HDU 1114 Piggy-Bank
    HDU 2955 Robberies
    NTOJ 290 动物统计(加强版)
    POJ 3624 Charm Bracelet
    HDU 2602 Bone Collector
    POJ 1523 SPF(无向图割顶)
    HDU 5311 Hidden String
    HDU 1421 搬寝室
    HDU 1058 Humble Numbers
    POJ 3259 Wormholes(spfa判负环)
  • 原文地址:https://www.cnblogs.com/yifanrensheng/p/14659792.html
Copyright © 2011-2022 走看看