Python数据分析-Pandas

在学习了Numpy后,进行数据科学计算,为何还要使用Pandas呢?其实原因就是效率高,那为何Pandas效率比numpy要高呢?其实Pandas和Numpy还是有着很大的关系的,Pandas本身是依赖numpy的,而ndarray在内存里占据这一段连续的内存空间,任何改变ndarray长度的操作都势必让所有value改变内存中的位置因此在某种程度上,Numpy操作效率还是比较慢的。但是Pandas并不是处理所有的数据都是效率很高的,那么一般情况下处理以下的数据比较友好:

Pandas适合处理多种类型的数据:

  • 具有不同数据类型列的表格数据(DataFrame),如SQL表或Excel电子表格。
  • 有序或无序(不固定频率)的时间序列数据。
  • 带有行和列标签的任意矩阵数据。
  • 任何其他形式的观测/统计数据集。
  • Pandas主要包含三种数据结构,分别是Series(一维),DataFrame(二维),Panel(三维)。其中Series和DataFrame可以用于处理绝大多数金融,统计,社会科学和许多工程领域的典型问题。
    Pandas库是统计科学家在分析数据时的理想工具,非常适合应用于数据清洗,分析/建模然后将分析结果组织成适合于绘图或表格显示的形式的全部过程。那么其中的优势在哪呢?

优势

  • 可以轻易地处理浮点以及非浮点类型的数据的缺失值
  • 大小可变:DataFrame和Panel都可以删除和插入
  • 灵活强大的分组功能,可对数据集进行拆分组合
  • 切片操作,便于索引,存取数据

数据结构

  • Series:类似于一维数组的对象,由一组数据以及一组相关的数据标签组成的数据结构。可以将Series看成是一个定长的有序字典,因为它是索引值到数据值的一个映射。
    • 创建Series方法——pd.Series
    • 获取数组表示形式——obj.values
    • 获取索引对象——obj.index

      eg:
      # 第一种创建series的方式:
          s1 = pd.Series([1,2,3,4,5,6,7,8,9])
          print(s1)
          print(s1.values)    # series的值
          print(s1.index)  # 索引信息
      
      # 第二种创建series方式:
          s2 = pd.Series(np.arange(10))
          print(s2)
      
      #  第三种通过字典的方式创建series:
          s3 = pd.Series({"cecilia":90,'cc':89,'abc':97})
          print(s3)
          print(s3.index)
          s4 = pd.Series(s1.to_dict()) # 转字典
          print(s4)
          s5 = pd.isnull(s3)
          s5.index.name = "name score" # 给列名添加名称
          print(s5)
    • 通过索引存取元素

      >>>obj2 = pd.Series([4, 7,-5,3], index=['d','b','a','c']) #还能自定义index进行创建Series
      >>>obj2
      d    4
      b    7
      a   -5
      c    3
      dtype: int64
      >>> obj2.index
      Index([u'd', u'b', u'a', u'c'], dtype='object')
      
      ## 通过索引存取元素和修改元素值
      >>>obj2['d']= 6 # 修改index='d'的索引值
      d    6
      b    7
      a   -5
      c    3
      dtype: int64
      >>>obj2[['c','a','d']]  ## 选取index='c' 'a' 'd'的元素值
      c    3
      a   -5
      d    6
      dtype: int64
      
      ## 按照索引条件获取元素
      >>>obj2[obj2>0]
      d    6
      b    7
      c    3
      dtype: int64
    • 检测缺失数据——pd.innull和pd.notnull
  • DataFrame:是一个table型数据,包含一组有序的列,每列可以是不同的值类型,DataFrame既有行索引也有列索引,可以看作是由Series组成的字典。dataFrame中的数据是以一个或者多个二维块存放的,而不是列表、字典等。
    • 创建DataFrame

      eg:
      >>> data = {'a':[1,2,3],
             'b':[4,5,6],
             'c':[7,8,9]}
      >>> df = pd.DataFrame(data)
      >>> print(df)
         a  b  c
      0  1  4  7
      1  2  5  8
      2  3  6  9
      注意:结果DataFrame会自动加上索引(跟Series一样),且全部列会被有序悱列!!!
      
      ## 如果指定了列序列,则DataFrame的列就会按照指定顺序迸行排列,如果指定的列不存在,那么结果是一个空的dataframe
      >>>pd.DataFrame(data, columns=['b', 'a', 'c'])
         b  a  c
      0  4  1  7
      1  5  2  8
      2  6  3  9
    • 存取元素(其实是一个Series)

      注意:

      • 返冋的Series拥有原DataFrame相同的索引,且其name属性也已经被相应地设置 好了。行也可以通过位置或名称的方式进行获取。
      • 如果采用非整数切片的方式进行选取数据,那么末端的索引对应的数据是包含在内的,而整数切片索引,其末端的索引对应的数据是“含前不含后”。
      ## 通过字典标记或者属性来获取Series
      >>> data = {'state':['Ohio','Ohio','Ohio','Nevada','Nevada'],
            'year':[2000, 2001, 2002, 2001, 2002],
            'pop':[1.5, 1.7, 3.6, 2.4, 2.9]}
      >>> df= pd.DataFrame(data, columns=['year', 'state', 'pop'])
      >>> print(df['state'])
      0      Ohio
      1      Ohio
      2      Ohio
      3    Nevada
      4    Nevada
      Name: state, dtype: object
      • ix、loc、iloc
        • ix——可以通过行号索引,也可以通过行标签索引(从pandas 0.20.0版本开始,官方不推荐使用.ix方法,而是使用.iloc 和.loc方法)
        • loc——loc[‘d’]表示索引的是第’d’行(index 是字符)通过行标签索引行数据,也可以索引某行某列
        • iloc——通过行号获取行数据或者多行数据,但是通过行标签获取会报错
          ## 承接上面的df
          >> print(df.loc[1]) # 选取第一行的数据
          state    Ohio
          year     2001
          pop       1.7
          Name: 1, dtype: object
          >> print(df.loc[0:2]) # 选取index=0到index=2行的数据,总共三行数据
            state  year  pop
          0  Ohio  2000  1.5
          1  Ohio  2001  1.7
          2  Ohio  2002  3.6
          ## 可以锁定行,按照特征属性多列选取元素
          >> num_cols = ['RT_user_norm', 'Metacritic_user_nom', 'IMDB_norm', 'Fandango_Ratingvalue', 'Fandango_Stars']
          >> bar_heights = norm_data.loc[0, num_cols].values
          >> print(bar_heights)
          [4.3 3.55 3.9 4.5 5.0]
          
          ## 重置索引index,通过行号获取数据
          >> df.reset_index(inplace=True)
          >> df.head()
          >> print(df.iloc[2:4]) # 获取第2行、第3行数据
             index   state  year  pop
          2      2    Ohio  2002  3.6
          3      3  Nevada  2001  2.4
    • 重建索引——reindex()函数:将会根据新索引进行重排。如果某个索引值当前不存在,就引入缺失值,可以采用填充的方式处理缺失值
      • 有几种参数:

        参数           说明
        index        用作索引的新序列。既可以是index实例,也
                       可以是其他序列型的Python数据结构。Index
                       会被完全使用,就像没有任何复制一样。
        method     插值(填充)方式。
        fill_value  在重新索引的过程中,需要引入缺失值时使用
                       的替代值 .
        limit        前向或后向填充时的最大填充量.
        level        在Multiindex的指定级别上匹配简单索引,否
                        则选取其子集
        copy           默认为True,无论如何都复制;如果为False,
                       则新旧相等就不复制
        
        其中method方法的参数如下:
        参数                     说明
        ffill或pad         前向填充(或搬运)值
        bfill或backfill        后向填充(或搬运)值
      • fill_value=0,直接填充0
    • 删除任意轴上的索引值——drop(index,axis=1/0)
    • apply函数——将函数应用到由各列或行所形成的一维数组上,比如sum和mean等

      eg:
      # 将求最大值和最小值之间的差得函数运用在某一轴上
      >>>f = lambda x: x.max() - x.min()
      >>>frame.apply(f)
      >>>frame.apply(f, axis=1)
      
    • 排名和排序
      • sort_index——对行或列索引进行排序 (按字典顺序)
      • order——针对按照值Series排序
      • rank——排名,默认情况下,rank是通过“为各组分配一个平均排名”的方式破坏平级关系的
      eg:
      >>>frame = DataFrame(np.arange(8).reshape((2, 4)),
          index=['three', 'one'], columns=['d','a','b','c'])
      
      >>>frame.sort_index()
      
      >>>frame.sort_index(axis=1)
      
      ## 默认的是升序排列,但也可以降序排列
      >>>frame.sort_index(axis=1, ascending=False)
      
      ## 根据一个或多个列觉得值进行排序,采用**by选项**
      >>>frame.sort_index(by=['three', 'one'])
      
      ## 如要按照值对Series 进行排序,那么可以order
      >>>obj = Series([4, 7, -3, 2])
      >>>obj.order()
      2   -3
      3    2
      0    4
      1    7
      >>>obj = Series([4, np.nan, 1, np.nan, -3, 2])
      >>>obj.order() #在排序时,缺失值默认都会被放到Series的末尾.
      4    -3
      2     1
      5     2
      0     4
      1   NaN
      NaN
      

      注意:排名(Series.rank(method=‘average‘,ascending=True))的作用与排序的不同之处在于,他会把对象的values替换成名次(从1 到 n)。这时唯一的问题在于如何处理平级项,方法里的 method 参数就是起这个作用的,他有四个值可选:average,min, max, first。

    • is_unique——属性验证是否是唯一的
  • 汇总与统计
    • sum(axis=1/0)——axis=1按照行求和
    • mean(axis=1, skipna=False)——skipna选项可以避免行列存在NA得值进行计算
    • idxmin和idxmax,达到最小值或最大值的索引
    • describe——用于一次性汇总统计

处理缺失数据得方式

  • 去除
  • 填充

原文地址:https://www.cnblogs.com/cecilia-2019/p/11368226.html

时间: 2024-10-01 03:06:39

Python数据分析-Pandas的相关文章

Python数据分析--Pandas知识点(二)

本文主要是总结学习pandas过程中用到的函数和方法, 在此记录, 防止遗忘. Python数据分析--Pandas知识点(一) 下面将是在知识点一的基础上继续总结. 13. 简单计算 新建一个数据表df 1 import pandas as pd 2 3 df = pd.DataFrame({"地区": ["A区","B区", "C区"], 4 "前半年销量": [3500, 4500,3800], 5

Python数据分析--Pandas知识点(三)

本文主要是总结学习pandas过程中用到的函数和方法, 在此记录, 防止遗忘. Python数据分析--Pandas知识点(一) Python数据分析--Pandas知识点(二) 下面将是在知识点一, 二的基础上继续总结. 前面所介绍的都是以表格的形式中展现数据, 下面将介绍Pandas与Matplotlib配合绘制出折线图, 散点图, 饼图, 柱形图, 直方图等五大基本图形. Matplotlib是python中的一个2D图形库, 它能以各种硬拷贝的格式和跨平台的交互式环境生成高质量的图形,

Python数据分析 Pandas模块 基础数据结构与简介(一)

pandas 入门 简介 pandas 组成 = 数据面板 + 数据分析工具 poandas 把数组分为3类 一维矩阵:Series 把ndarray强大在可以存储任意数据类型可以专门处理时间数据 二维矩阵:DataFrame 三维面板数据:Panel 背景:为金融产品数据分析创建的,对时间序列支持非常好! 数据结构 导入pandas模块 import pandas as pd 读取csv文件,数据类型就是二维矩阵 DataFrame df = pd.read_csv('路径')type(df)

python数据分析pandas中的DataFrame数据清洗

pandas中的DataFrame中的空数据处理方法: 方法一:直接删除 1.查看行或列是否有空格(以下的df为DataFrame类型,axis=0,代表列,axis=1代表行,以下的返回值都是行或列索引加上布尔值)• isnull方法 • 查看行:df.isnull().any(axis=1)  • 查看列:df.isnull().any(axis=0)• notnull方法:• 查看行:df.notnull().all(axis=1)• 查看列:df.notnull().all(axis=0

Python数据分析与挖掘所需的Pandas常用知识

Python数据分析与挖掘所需的Pandas常用知识 前言Pandas基于两种数据类型:series与dataframe.一个series是一个一维的数据类型,其中每一个元素都有一个标签.series类似于Numpy中元素带标签的数组.其中,标签可以是数字或者字符串.一个dataframe是一个二维的表结构.Pandas的dataframe可以存储许多种不同的数据类型,并且每一个坐标轴都有自己的标签.你可以把它想象成一个series的字典项. Pandas常用知识 一.读取csv文件为dataf

《Python 数据分析》笔记——pandas

Pandas pandas是一个流行的开源Python项目,其名称取panel data(面板数据)与Python data analysis(Python 数据分析)之意. pandas有两个重要的数据结构:DataFrame和Series pandas数据结构之DataFrame pandas的DataFrame数据结构是一种带标签的二维对象,与Excel的电子表格或者关系型数据表非常相似. 可以用下列方式来创建DataFrame: 1.从另一个DataFrame创建DataFrame 2.

利用Python进行数据分析——pandas入门

利用Python进行数据分析--pandas入门 基于NumPy建立的 from pandas importSeries,DataFrame,import pandas as pd 一.两种数据结构 1.Series 类似于Python的字典,有索引和值 创建Series #不指定索引,默认创建0-N In [54]: obj = Series([1,2,3,4,5]) In [55]: obj Out[55]: 0 1 1 2 2 3 3 4 4 5 dtype: int64 #指定索引 In

基于 Python 和 Pandas 的数据分析(2) --- Pandas 基础

在这个用 Python 和 Pandas 实现数据分析的教程中, 我们将明确一些 Pandas 基础知识. 加载到 Pandas Dataframe 的数据形式可以很多, 但是通常需要能形成行和列的数据集. 所以可以是如下的 dictionary 的形式: web_stats = {'Day':[1,2,3,4,5,6], 'Visitors':[43,34,65,56,29,76], 'Bounce Rate':[65,67,78,65,45,52]} 我们可以通过如下方式把这个 dictio

Python——数据分析,Numpy,Pandas,matplotlib

由于图片内容太多,请拖动至新标签页再查看 Python--数据分析,Numpy,Pandas,matplotlib 原文地址:https://www.cnblogs.com/Jery-9527/p/10804069.html