zoukankan      html  css  js  c++  java
  • Pandas

    一、Pandas与NumPy的区别

    如果用 python 的列表和字典来作比较, 那么可以说 Numpy 是列表形式的,没有数值标签,而 Pandas 就是字典形式。Pandas是基于Numpy构建的,让Numpy为中心的应用变得更加简单。

    二、导入模块

      import Pandas as pd #为了方便使用Pandas 采用pd简写
    

    三、Series

    Series的字符串表现形式为:索引在左边,值在右边。由于我们没有为数据指定索引。于是会自动创建一个0到N-1(N为长度)的整数型索引。

      s = pd.Series([1,3,6,np.nan,44,1])
    

    四、DataFrame

    (1)创建方法一

      dates = pd.date_range('20160101',periods=6)
      df = pd.DataFrame(np.random.randn(6,4),index=dates,columns=['a','b','c','d']) 
    

    (2)创建方法二

      df2 = pd.DataFrame({'A' : 1.,
                    'B' : pd.Timestamp('20130102'),
                    'C' : pd.Series(1,index=list(range(4)),dtype='float32'),
                    'D' : np.array([3] * 4,dtype='int32'),
                    'E' : pd.Categorical(["test","train","test","train"]),
                    'F' : 'foo'})
    

    DataFrame是一个表格型的数据结构,它包含有一组有序的列,每列可以是不同的值类型(数值,字符串,布尔值等)。DataFrame既有行索引也有列索引, 它可以被看做由Series组成的大字典。

    (3)根据每一个不同的索引来挑选数据, 比如挑选 b 的元素

      df['b']
    

    (4)查看数据中的类型

      df2.dtypes
    

    (5)查看对列的序号

      df2.index
    

    (6)查看每种数据的名称

      df2.columns
    

    (7)查看所有DateFrame的值

      df2.values
    

    (8)数据的总结

      df2.describe()
    

    (9)翻转数据(transpose)

      df2.T
    

    (10)对数据的 index 进行排序

      df2.sort_index(axis=1, ascending=False)
    

    (11)对数据值排序

      df2.sort_values(by='B')
    

    五、选择数据

    (1)简单筛选

      df['A']
    
      df.A
    

    (2)切片筛选(让选择跨越多行或多列)

      df[0:3]
    
      df['20130102':'20130104']
    

    (3)使用标签来选择数据(loc) :代表所有行

      df.loc['20130102']
    
      df.loc[:,['A','B']]
    
      df.loc['20130102',['A','B']]
    

    (4)根据位置进行选择(iloc)

      df.iloc[3,1]
    
      df.iloc[3:5,1:3]
    
      df.iloc[[1,3,5],1:3]
    

    (5)混合选择(ix)

      df.ix[:3,['A','C']]
    

    (6)通过判断的筛选

      df[df.A>8]
    

    六、设置值

    (1)根据位置设置(loc 和 iloc)

      df.iloc[2,2] = 1111
      df.loc['20130101','B'] = 2222
    

    (2)根据条件设置

      df.B[df.A>4] = 0
    

    (3)按行或列设置

      df['F'] = np.nan
    

    (4)添加数据

      df['E'] = pd.Series([1,2,3,4,5,6], index=pd.date_range('20130101',periods=6)) 
    

    七、处理丢失数据

    有时候我们导入或处理数据, 会产生一些空的或者是 NaN 数据,如何删除或者是填补这些 NaN 数据呢?

    (1)直接去掉有 NaN 的行或列(dropna)

      df.dropna(
            axis=0,     # 0: 对行进行操作; 1: 对列进行操作
            how='any'   # 'any': 只要存在 NaN 就 drop 掉; 'all': 必须全部是 NaN 才 drop 
      ) 
    

    (2)将 NaN 的值用其他值代替

      df.fillna(value=0)
    

    (3)判断是否有缺失数据 NaN ,为 True 表示缺失数据

      df.isnull() 
    

    (4)检测在数据中是否存在 NaN, 如果存在就返回 True(表格太大不好看)

      np.any(df.isnull()) == True
    

    八、Pandas导入导出

      pandas可以读取与存取的资料格式有很多种,像csv、excel、json、html与pickle等… 详细请看[官方说明文件](https://pandas.pydata.org/pandas-docs/stable/user_guide/io.html)
    

    (1)读取CSV(excel可以打开)

      data = pd.read_csv('student.csv')
    

    (2)将资料存取成pickle

      data.to_pickle('student.pickle')
    

    九、Pandas合并

    pandas处理多组数据的时候往往会要用到数据的合并处理,使用 concat是一种基本的合并方式.而且concat中有很多参数可以调整,合并成你想要的数据形式。

    (1)axis (合并方向)

      res = pd.concat([df1, df2, df3], axis=0) #concat纵向合并
    

    (2)ignore_index (重置 index)

      res = pd.concat([df1, df2, df3], axis=0, ignore_index=True)
    

    (3)join (合并方式)

      #纵向"外"合并df1与df2
      res = pd.concat([df1, df2], axis=0, join='outer')
    

    依照column来做纵向合并,有相同的column上下合并在一起,其他独自的column个自成列,原本没有值的位置皆以NaN填充。

      #纵向"内"合并df1与df2
      res = pd.concat([df1, df2], axis=0, join='inner')
    

    只有相同的column合并在一起,其他的会被抛弃。

    (4)join_axes (依照 axes 合并)

      #依照`df1.index`进行横向合并
      res = pd.concat([df1, df2], axis=1, join_axes=[df1.index])
    

    (5)append (添加数据)

    append只有纵向合并,没有横向合并。

      res = df1.append(df2, ignore_index=True)
    

    十、Pandas 合并 merge

    pandas中的merge和concat类似,但主要是用于两组有key column的数据,统一索引的数据. 通常也被用在Database的处理当中。

    (1)依据一组key合并

      res = pd.merge(left, right, on='key')
    

    (2)依据两组key合并

      res = pd.merge(left, right, on=['key1', 'key2'], how='inner')
    
      res = pd.merge(left, right, on=['key1', 'key2'], how='outer')
    
      res = pd.merge(left, right, on=['key1', 'key2'], how='left')  #基于左边
    
      res = pd.merge(left, right, on=['key1', 'key2'], how='right') #基于右边
    

    (3)Indicator

    indicator=True会将合并的记录放在新的一列。

      res = pd.merge(df1, df2, on='col1', how='outer', indicator=True)
    
      # 自定indicator column的名称
      res = pd.merge(df1, df2, on='col1', how='outer', indicator='indicator_column')
    

    (4)依据index合并

      res = pd.merge(left, right, left_index=True, right_index=True, how='outer')
    

    (5)解决overlapping的问题 (区分名字相同但内涵不同的问题,比如男生的年龄和女生的年龄)

      res = pd.merge(boys, girls, on='k', suffixes=['_boy', '_girl'], how='inner')
    

    十一、Pandas数据可视化

    (1)导入模块

      import matplotlib.pyplot as plt
    

    (2)Series可视化

      # 随机生成1000个数据
      data = pd.Series(np.random.randn(1000),index=np.arange(1000))
    
      # 为了方便观看效果, 我们累加这个数据
      data.cumsum()
    
      # pandas 数据可以直接观看其可视化形式
      data.plot()
    
      plt.show()
    

    (3)Dataframe 可视化

      data = pd.DataFrame(
            np.random.randn(1000,4),
            index=np.arange(1000),
            columns=list("ABCD")
      )
      data.cumsum()
      data.plot()
      plt.show()
    

    (4)scatter

      ax = data.plot.scatter(x='A',y='B',color='DarkBlue',label='Class1')
      data.plot.scatter(x='A',y='C',color='LightGreen',label='Class2',ax=ax)
      plt.show()
    博客内容用于记录自己学习后的收获,如有侵权请联系我删除
  • 相关阅读:
    .NetCore 3.1和.NetCore 5.0 中WebApi的请求参数的验证方法
    php 使脚本持续的运行
    Elasticsearch es三种分页方式和对比
    es 大批量写入提高性能的策略
    php 使用多进程批量插入数据
    【转】EM算法MATLAB代码及详细注解
    【转】详解EM算法与混合高斯模型(Gaussian mixture model, GMM)
    【转】高斯混合模型
    【转】二维高斯分布(Two-dimensional Gaussian distribution)的参数分析
    word使用dot模板以spring word 模板为例
  • 原文地址:https://www.cnblogs.com/ptxiaochen/p/13653249.html
Copyright © 2011-2022 走看看