zoukankan      html  css  js  c++  java
  • Pandas---1.基本数据结构(Series/Index/MultiIndex/DataFrame)

    一、Series

    1.创建

    (1)方法一

    class pandas.Series(data=None, index=None, dtype=None, name=None, copy=False,fastpath=False)

    参数:

    1. data:它可以是一个字典、array-like、标量。表示Series包含的数据,如果是序列/数组,则它必须是一维的
      1. 如果是字典,则字典的键指定了label。如果你同时使用了index,则以index为准。
      2. 如果是标量,则结果为:该标量扩充为index长度相同的列表。
    2. index:一个array-like或者一个Index对象。它指定了label。其值必须唯一而且hashable,且长度与data一致。如果data是一个字典,则index将会使用该字典的key(此时index不起作用)。如果未提供,则使用np.arange(n)
    3. name:一个字符串,为Series的名字。
    4. dtype:指定数据类型。如果为None,则数据类型被自动推断
    5. copy:一个布尔值。如果为True,则拷贝输入数据data

    举例:

    # (1)由字典创建,字典的key就是index,values就是values
    dic = {'a':1 ,'b':2 , 'c':3, '4':4, '5':5}
    s = pd.Series(dic)
    print(s)
    
    4    4
    5    5
    a    1
    b    2
    c    3
    dtype: int64
    
    # (2)由数组创建(一维数组)
    arr = np.random.randn(5)
    s = pd.Series(arr)
    print(arr)
    print(s)
    # 默认index是从0开始,步长为1的数字
    
    s = pd.Series(arr, index = ['a','b','c','d','e'],dtype = np.object)
    print(s)
    # index参数:设置index,长度保持一致
    # dtype参数:设置数值类型
    
    # (3)由标量创建
    s = pd.Series(10, index = range(4))
    print(s)
    # 如果data是标量值,则必须提供索引。该值会重复,来匹配索引的长度
    0    10
    1    10
    2    10
    3    10
    dtype: int64 

    (2)方法二

    Series.from_array(arr, index=None, name=None, dtype=None, copy=False, fastpath=False)
    

    参数:

    1. arr:可以是一个字典、array-like、标量。其他参数见1.

    2.将Series转换成其他数据类型

    (1).to_dict():转换成字典,格式为{label->value}

    (2).to_frame([name])转换成DataFramenameIndex的名字

    (3).tolist()转换成列表

    (4).to_string():转换成字符串

      .to_string(buf=None, na_rep='NaN', float_format=None, header=True, index=True, 
      length=False, dtype=False, name=False, max_rows=None)
    

    参数:

    1. buf:一个StringIO-like对象,是写入的buffer
    2. na_rep:一个字符串,代表数值NaN
    3. float_format:浮点数的格式化函数。应用于浮点列
    4. header:一个布尔值。如果为True,则添加头部信息(index name
    5. index:一个布尔值。如果为True,则添加index labels
    6. length:一个布尔值。如果为True,则添加Series的长度信息
    7. dtype:一个布尔值。如果为True,则添加dtype信息
    8. name:一个布尔值。如果为True,则添加Series name
    9. max_rows:一个整数值,给出了最大转换的行数。如果为None,则转换全部。

    返回转换后的字符串。

    二、Index

    1.创建

    创建Index对象

    class pandas.Index(data=None, dtype=None, copy=False, name=None, fastpath=False, tupleize_cols=True)

    参数:

    1. data:一个array-like,必须是一维的
    2. name:一个字符串,为Index的名字。
    3. dtype:指定数据类型。如果为None,则默认为object
    4. copy:一个布尔值。如果为True,则拷贝输入数据data
    5. tupleize_cols:一个布尔值,如果可能则尽量创建MultiIndex对象

      Index对象负责管理轴label和其他元数据(比如轴name)。构建Series/DataFrame时,传给index/columns关键字的任何数组或者序列都将被转化成一个IndexIndex 对象是immutable,因此用户无法对其进行修改。这样才能够使得Index对象在多个数据结构之间安全共享。

    2.多种索引类型

    1. Index:最泛化的Index对象,将轴label表示为一个Python对象组成的Numpy数组
    2. Int64Index:针对整数的特殊Index
    3. MultiIndex:层次化索引对象,表示单个轴上的多层索引。可以看做由元组组成的数组
    4. DatatimeIndex:存储纳秒级时间戳,用numpydatatime64类型表示
    5. PeriodIndex:针对Period数据(时间间隔)的特殊Index

    3.Index功能

      Index的功能类似一个固定大小的集合。其类似于集合的方法有(因为Index不可变,因此返回的都是新的Index对象):

    1. .copy([name,deep,dtype]):返回一份Index的拷贝。
    2. .append(other):连接另一个Index对象,产生一个新的Index对象。注意重复的label并不会合并
    3. .difference(other):计算差集,返回一个Index对象
    4. .intersection(other):计算交集,返回一个Index对象
    5. .union(other):计算并集,返回一个新的Index对象
    6. .isin(values[, level]):计算Index中各label是否在values
    7. .delete(loc):删除下标loc处的元素,得到新的Index
    8. .drop(labels[, errors]):删除传入的labels,得到新的Index
    9. .insert(loc, item):在指定下标位置插入值,得到新的Index
    10. .unique():返回Index中唯一值的数组,得到新的Index

    4.将Index转换成其他数据类型

    1. .astype(dtype,[,copy]):转换成另一个数据类型的Index,其labeldtype被转换成指定的值
    2. .tolist():转换成列表
    3. .to_series(**kwargs):转换成SeriesSeries的数据和label相同

    5.Index提供的选取方法

    1. .get_indexer(target[, method, limit, ...]) :获取target(一个Index对象)对应的下标列表。

      1. target:一个Index对象。我们要考察的就是Index中的每个labelself中的下标序列。

      2. method:指定label的匹配方法。可以为None,表示严格匹配(如果不存在则下标为 -1)。如果为'pad'/'ffill',则:若未找到匹配的,则使用前向匹配。如果为'backfill'/'bfill',则:若未找到匹配的,则使用后向匹配。如果为'nearest',则:若未找到匹配的,则使用最近邻匹配。

        匹配时,假设你的Indexlabel是有序排列的(要么是升序,要么是降序)

      3. limit:一个整数,指定前向/后向/最近填充时:如果有连续的kNaN,则只填充其中limit个。

      4. tolerance:一个整数,用于给出在不匹配时,连续采用前向/后向/最近邻匹配的跨度的最大值。

    2. .get_level_values(level):返回指定levelIndex,用于MultiIndex

    3. .get_loc(key[, method, tolerance]):返回指定label处的下标,由key指定。其中methodtolerance参数见上述。如果method=None,且key指定的label找不到,则抛出异常。

    4. .get_value(series, key):寻找Series指定label处的值。若key指定的label找不到,则抛出异常。

    5. .slice_locs([start, end, step, kind]):计算给定start labelend label之间的下标序列,返回代表该下标序列的切片或者数组。其中不包括end

    三、MultiIndex

    1.创建

    (1)方法一

    class pandas.MultiIndex(levels=None, labels=None, sortorder=None, names=None,copy=False, verify_integrity=True, _set_identity=True, name=None, **kwargs)

    参数:

    1. levels:一个数组的列表,给出了每一级的level

    2. labels:一个数组的列表,给出了每一级level的下标。第ilabel是这样产生的:

      1. 首先获取labels[i],它是一个下标序列,代表第 级。
      2. 假设第 k位置为整数 3,在第 级第 位的label就是levels[i][3]
    3. sortorder:一个整数,给出了已经排序好了的level级别。

    4. names:一个字符串序列,给出了每个Indexname。其中每个级别对应一个Index

    5. copy:一个布尔值。如果为True,则拷贝基础数据

    6. verify_integrity:一个布尔值。如果为True,则检测各级别的label/level都是连续的且有效的

    7. name:指定了本MultiIndex的名字

      MultiIndex代表的是多级索引对象。它继承自Index,其中的多级label采用元组对象来表示。在MultiIndex内部,并不直接保存元组对象,而是使用多个Index对象保存索引中每级的label

    (2)其他方法

    1. MultiIndex.from_arrays(arrays[, sortorder, ...]):将二维序列转换为MultiIndex。其中arraysarray-like的序列,每个array-like按顺序的给出了一列label(一个级别)
    2. MultiIndex.from_tuples(tuples[, sortorder, ...]) :将元组序列转换为MultiIndex。其中tuplestuple-like的序列,每个array-like按顺序的给出了一行label对(不同级别的一对)
    3. MultiIndex.from_product(iterables[, ...]):根据多个可迭代对象生成一个MultiIndex,其中使用笛卡尔积的算法。其中iterables为可迭代对象的序列

    你也可以通过传递一个元组列表给Index(),并且将tupleize_cols设置为True来创建MultiIndex

    四、DataFrame

    1.DataFrame介绍

      DataFrame 是一个表格型的数据结构,它含有一组有序的列,每一列都可以是不同的值类型(数值、日期、object类型)。其中object类型可以保存任何python对象,比如字符串。同一列必须是相同的值类型。

    • DataFrame 既有行索引,又有列索引。他可以被看作为Series组成的字典(共用同一个行索引)
    • DataFrame中面向行和面向列的操作基本上是平衡的。其实DataFrame中的数据是以一个或者多个二维块存放的

    2.创建

    class pandas.DataFrame(data=None, index=None, columns=None, dtype=None, copy=False)
    

    参数:

    • data:可以是一个二维数组、字典、或者DataFrame
    • index:一个Index或者array-like对象(必须为一维的),它指定了行标签。如果未提供,则使用np.arange(n)
    • columns:一个Index或者array-like对象(必须为一维的),它指定了列标签。如果未提供,则使用np.arange(n)
    • dtype:指定数据类型。如果为None,则数据类型被自动推断
    • copy:一个布尔值。如果为True,则拷贝输入数据data

    常见的构造DataFrame有以下情况:

    1. 二维ndarraydata就是数据,此时可以传入index/columns参数
    2. 一个字典,其中字典的值为一维数组、一维列表、一维元组:此时每个键就是列索引,对应的值就是列数据。要求所有序列的长度相同
    3. numpy的结构化数组:类似于由数组组成的字典
    4. Series组成的字典:此时每个键就是列索引,对应的Series就是列数据。如果没有显式的指定行索引,那么各个Series的索引将会被合并成DataFrame的行索引。
    5. 字典的字典:各个内层字典会成为一列,键会被合并成结果的行索引。跟Series 组成的字典情况一致
    6. 字典或者Series的列表:每一项将会成为DataFrame的一行。字典的键、Series索引的并集将会成为DataFrame的列索引
    7. 列表、元组组成的列表:类似于二维ndarray
    8. 另一个DataFrame:该DataFrame的索引将会被沿用,除非显式指定其他索引
    9. numpyMaskedArray:类似于二维ndarray,只是掩码值在结果DataFrame中会变成NA/缺失值

    columns/index有两种作用:如果构造的DataFrame没有索引,则它们分别给索引赋值;如果构造的DataFrame已有索引,则它们按照指定顺序排列指定的索引。

    3.从其他数据结构中创建DataFrame

    (1)DataFrame.from_dict()

    DataFrame.from_dict(data, orient='columns', dtype=None)

    从字典中创建DataFrame

    1. data:是个字典,其格式为: {key:array-like}或者{key:dict}
    2. orient:指定了key为行还是列。参数的值为'columns'key为列的label,默认行为);或者'index'key为行的label
    3. dtype:数据类型。如果为None,则自动推断。

    (2)DataFrame.from_items()

    DataFrame.from_items(items, columns=None, orient='columns')

    从元组序列中创建DataFrame

    1. items:为元组序列,元组格式为:(key,value),其中value为表示一维数据的序列或者Series对象。
    2. columns:一个序列,给出列的labels
    3. orient='index'时必须传入(此时key 指定的是行的label),且长度不能大于DataFrame的列数。
    4. orient='columns时,key就是列的label,此时columns关键字参数指定的列label必须等于某个key;否则抛出异常。
    5. orient:参见.from_dict的解释。

    4.将DataFrame转换为其他数据类型

    (1).to_dict()

    .to_dict(*args, **kwargs)方法:转换成字典。参数orient决定了转换方式。

    1. orient ='dict':字典的形式为: {col_label:{index_label:value}}(默认行为)
    2. orient ='list':字典的形式为: {col_label:[values]}
    3. orient ='series':字典的形式为: {col_label:Series(values)}
    4. orient ='split':字典的形式为: {'index':[index_labels],'columns':[col_labels],'data':[values]}
    5. orient ='records':字典的形式为: [{col_label:value},...,{col_label:value}]
    6. orient ='index':字典的形式为: {index_label:{col_label:value}}
    7. 你可以使用简化字符串,如's'代表'series''sp'代表'split'

    (2).to_records()

    .to_records(index=True, convert_datetime64=True)方法:转换成结构数组。

    1. index:一个布尔值。如果为True,则结果中包含index
    2. convert_datetime64:一个布尔值,如果为True,则转换DatetimeIndexdatetime.datetime

    (3).to_string()

    将DataFrame转换成字符串

    to_string(buf=None, columns=None, col_space=None, header=True, index=True,
      na_rep='NaN', formatters=None, float_format=None, sparsify=None, 
      index_names=True, justify=None, line_width=None, max_rows=None,
      max_cols=None, show_dimensions=False)
    

    功能:

    1. buf:一个StringIO-like对象,是写入的buffer

    2. columns:一个序列,指定了列标签的一个子集,该子集的数据被输出

    3. col_space:一个整数,指定了每一列的最小宽度

    4. header:一个布尔值。如果为True,则添加头部信息(column labels

    5. index:一个布尔值。如果为True,则添加index labels

    6. na_rep:一个字符串,代表数值NaN

    7. float_format:浮点数的格式化函数(单参数)。应用于浮点列

    8. formatters:一个单参数函数的列表(列表长度等于列数)或者一个单参数函数的字典。

      1. 如果是列表,则根据列号,对应使用格式化函数
      2. 如果是字典,则根据列label,对应使用格式化函数
    9. sparsify:一个布尔值。Set to False for a DataFrame with a hierarchical index to print every multiindex key at each row, default True

    10. index_names:一个布尔值。如果为True,则添加index names

    11. justify:指定column label的对齐方式。可以为'left'(左对齐),或者'right'(右对齐)。默认为None

    返回转换后的字符串。

  • 相关阅读:
    ArcMap操作随记(10)
    python的matplotlib.pyplot绘制甘特图
    C# 使用Newtonsoft.Json读写Json文件
    MVVM-后台代码绑定事件命令
    abp vue did you register the component correctly
    .net orm写入oracle数据库的clob字段提示:"ORA-01461:仅可以插入LONG列的LONG值赋值"
    WindowsServer2012 IIS8 500.19错误 ExtensionlessUrlHandler-Integrated-4.0
    Wpf TextBox 如何简单粗暴的实现水印效果?
    面向对象23种设计模式系列(三)- 行为型设计模式
    值类型取值范围、与运算(&)、或运算(|)、非运算(~)、异或运算(^)、位运算和位枚举
  • 原文地址:https://www.cnblogs.com/nxf-rabbit75/p/12108406.html
Copyright © 2011-2022 走看看