分享

5-Pandas数据处理

 印度阿三17 2021-03-04

处理缺失数据

  • None

    • None是Python自带的,其类型为python object。因此,None不能参与到任何计算中

  • np.nan(NaN)

    • np.nan是浮点类型,能参与到计算中。但计算的结果总是NaN

  • object类型相比于int类型运算时消耗时间更长

    • %timeit np.arange(1e5, dtype=object)

    • %timeit np.arange(1e5, dtype=int)

  • pandas中的None与NaN

    • 判断函数

    • 过滤函数

    • 填充函数

    • 获取全不为空的行,进行过滤

    • 判断某一行的值

    • 默认判断某一列的值

    • 全为True才为True,类似and

    • 某列是否全部为空

    • 默认判断某一列的值

    • 有一个为True则为True,类似or

    • 某列是否存在空值

    • 是否不为空

    • 是否为空

    • df.isnull()

    • df.notnull()

    • df.isnull().any()

    • df.isnull().all()

    • df.notnull().all(axis=1)

    • df[df.notnull().all(axis=1)]

    • dropna()

    • df.dropna(how='all')

    • how默认是any

    • 某行或列的值都为空的才删除

    • 删除有空的列

    • 默认删除有空的行

    • 可以选择过滤的是行还是列(默认为行)

    • dropna()

    • df.dropna()

    • df.dropna(axis=1)

    • 也可以选择过滤的方式 how = 'all'

    • df.fillna(value=9999)

    • df.fillna(method='bfill')

    • df.fillna(method='ffill')

    • df.fillna(method='bfill',axis=1)

    • df.fillna(method='ffill',axis=1)

    • 填充指定值

    • 加inplace=True,进行修改

    • axis=0,列的后面=>下

    • 行的后面=>右

    • fillna()

    • pandas中None与np.nan都视作np.nan

    • pandas中None与np.nan的操作

数据处理

  • 检测重复行

    • 只对abc三列进行检测是否重复

    • 检测是否为第二次出现

    • 使用duplicated()函数检测重复的行,返回元素为布尔类型的Series对象,每个元素对应一行,如果该行不是第一次出现,则元素为True

    • df.duplicated()

    • df.duplicated(subset=['a','b','c'])

  • 删除重复行

    • cond = df.duplicated(subset=['a','b','c'])

    • df.loc[~cond]

    • np.logical_not(cond)

    • 取反

    • 使用drop_duplicates()函数删除重复的行

    • df.drop_duplicates()

    • df.drop_duplicates(subset=['a','b','c'])

    • 过滤掉重复项

  • 映射

    • df3.rename(index={'张三':'Mr Zhang'})

    • df3.rename({'张三':'Mr Zhang'})

    • df3.rename(columns={'语文':'Language'})

    • df3.rename({'数学':'Math'},axis=1)

    • 默认修改行索引

    • 修改列索引

    • 修改列索引

    • 使用map()函数,由已有的列生成一个新列

    • df2['政治'] = df2['语文'].map({84:100,11:100,78:100,24:100})

    • df2['政治'] = df2['语文'].map(lambda x:x*2)

    • def grade(x):
          if x<60:
              return '不及格'
          elif x<80:
              return '及格'
          else:
              return '优秀'
      df2['等级'] = df2['语文'].map(grade)
    • 适合处理某一单独的列

    • 使用replace()函数,对values进行替换操作

    • replace还经常用来替换NaN元素

    • df.replace({85:1000,12:3000})

    • df.replace({np.nan:0})

    • 映射的含义

    • replace()函数:替换元素

    • map()函数:新建一列, 最重要

    • rename()函数:替换索引

    • 创建一个映射关系列表,把values元素和一个特定的标签或者字符串绑定

    • 需要使用字典

    • 包含三种操作

    • 概述

    • replace()函数:替换元素

    • map()函数:新建一列(行也可以)

    • rename()函数:替换索引

  • 异常值检测和过滤

    • df22.sort_values('数学')

    • df22.sort_values('张三',axis=1)

    • df22.sort_values('语文',ascending=False)

    • 排的是行的顺序

    • 默认升序

    • 按某列值排序

    • 排的是列的顺序

    • 按张三各科成绩从左往右升序

    • 降序

    • df22.query('语文==24')

    • df22.query('语文

      20 or 数学

      35')

    • df22.query('语文

      20 | 数学

      63')

    • df22.query('语文>=78')

    • df22.query('语文 >= @score')

    • df22.query('语文 in @list1')

    • 使用变量

    • df22['语文'].unique()

    • df22.drop('张三')

    • df22.drop('语文',axis=1)

    • 删除行

    • 删除指定的列

    • 使用std()函数可以求得DataFrame对象每一列的标准差

    • 借助any()函数, 测试是否有True,有一个或以上返回True,反之返回False

    • 对每一列应用筛选条件,去除标准差太大的数据

    • cond = df['weight']<1000

    • df.loc[cond]

    • df.describe()

    • 使用describe()函数查看每一列的描述性统计量

    • df.std()

    • 删除特定索引df.drop(labels, inplace = True)

    • unique():唯一,去重

    • df.query:按条件查询

    • 排序

  • 抽样

    • df22.take(np.random.randint(0,4,size=10))

    • df22.take(np.random.permutation([0,1,2,3]))

    • permutation打乱顺序,take按照指定顺序排列

    • 指定列顺序

    • 行排序

    • 指定行顺序

    • np.random.permutation([1,2,3,4,5])

    • 可以借助np.random.permutation()函数随机排序

    • 使用.take()函数排序

    • 随机排列:打乱顺序

    • df22.take([1,0,2,3])

    • df22.take([1,0,2,3,4],axis=1)

    • 模拟无放回抽样,不会拿到重复数据,依次拿去

    • 模拟有放回抽样,取完一个之后,可能再次抽到相同的数据

  • 数据聚合

    • 得到分组情况

    • 得到分组对象

    • 数据聚合是数据处理的最后一步,通常是要使每一个数组生成一个单一的数值

    • 数据分类处理

    • 数据分类处理的核心: groupby()函数

    • 分组:先把数据分为几组

    • 用函数处理:为不同组的数据应用不同的函数以转换数据

    • 合并:把不同组得到的结果合并起来

    • 概述

    • df.groupby(by='color')

    • df.groupby(by='color').groups

    • df.groupby(by='color').sum()

    • df.groupby(by='color').mean()

  • 高级数据聚合

    • apply()里面可以跟自定义的函数,包括简单的求和函数以及复杂的特征间的差值函数等

    • apply不能直接使用例如sum、max、min、’count'等方法

    • transform

    • df.groupby('color')[['price']].apply(sum)

    • transform() 里面不能跟自定义的特征交互函数

    • 它只能对每一列进行计算,所以在groupby()之后,transform()之前是要指定要操作的列

    • 如果与groupby()方法联合使用,需要对值进行去重

    • df.groupby('color')[['price']].transform(sum)

    • apply

  • 用索引合并

    • ddd1.merge(ddd2,left_index=True,right_index=True)

读取数据

  • pd.read_csv('../data/SMSSpamCollection',sep='\t',header=None)

  • df = pd.read_table('../data/SMSSpamCollection',header=None) 

来源:https://www./content-4-878851.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约