On this page

    Pandas

    Series

    str.len

    计算 Series/Index 的每个元素的长度。

    元素可以是一个序列(如字符串、元组或列表)或一个集合(如字典)。

    DataFrame

    map

    将序列中的每一个元素,输入函数,最后将映射后的每个值返回合并,得到一个迭代器。

    sample

    DataFrame.sample(n=None, frac=None, replace=False, weights=None, random_state=None, axis=None)

    hist

    DataFrame.hist(data, column=None, by=None, grid=True, xlabelsize=None, xrot=None, ylabelsize=None, yrot=None, ax=None, sharex=False, sharey=False, figsize=None, layout=None, bins=10, **kwds)

    mean、median、std

    求均值,中位数, 标准差

    unique

    一共有多少出现过的元素, 多次出现的元素算一次

    iloc

    DataFrame.iloc选择DataFrame数据结构的行和列。

    DataFrame.iloc[0:2,0:3];

    表示该数据结构0:2,0-2行;

    表示该数据结构0:3,0-3列;

    groupby

    DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=NoDefault.no_default, observed=False, dropna=True)

    使用一个 mapper 或者 a Series of columns 对 DataFrame 分组。

    分组操作包括分割对象、应用函数和合并结果的一些组合。这可以用于对大量数据进行分组,并对这些分组进行计算操作。

    agg

    DataFrame.agg(func=None, axis=0, *args, **kwargs)

    对指定的维度使用一个或多个操作进行聚合。

    shift

    DataFrame.shift(periods=1, freq=None, axis=0, fill_value=NoDefault.no_default)

    通过想要的周期的数字移动索引, 以一种可选的时间频率。

    freq 没有传入时, 在不重新调整数据的情况下移动索引。 如果传入 freq(在这个例子中, index 必须是 date 或者 datatime,否则会抛出 NotImplementedError) , index 使用 periodsfreq 增加。 只要在 index 中指定了 infer 或者设置了 freq 或者 inferred_freq 属性, freq 可以被推断。

    CSV

    to_string

    import pandas as pd
    
    df = pd.read_csv('nba.csv')
    
    print(df.to_string())
    

    to_string() 用于返回 DataFrame 类型的数据,如果不使用该函数,则输出结果为数据的前面 5 行和末尾 5 行,直接部分以 … 代替。

    to_csv

    to_csv() 方法将 DataFrame 存储为 csv 文件:

    import pandas as pd
       
    # 三个字段 name, site, age
    nme = ["Google", "Runoob", "Taobao", "Wiki"]
    st = ["www.google.com", "www.runoob.com", "www.taobao.com", "www.wikipedia.org"]
    ag = [90, 40, 80, 98]
       
    # 字典
    dict = {'name': nme, 'site': st, 'age': ag}
         
    df = pd.DataFrame(dict)
     
    # 保存 dataframe
    df.to_csv('site.csv')
    

    head( n ) 方法用于读取前面的 n 行,如果不填参数 n ,默认返回 5 行。

    import pandas as pd
    
    df = pd.read_csv('nba.csv')
    
    print(df.head())
    

    tail()

    tail( n ) 方法用于读取尾部的 n 行,如果不填参数 n ,默认返回 5 行,空行各个字段的值返回 NaN

    import pandas as pd
    
    df = pd.read_csv('nba.csv')
    
    print(df.tail())
    

    info()

    info() 方法返回表格的一些基本信息:

    import pandas as pd
    
    df = pd.read_csv('nba.csv')
    
    print(df.info())
    

    输出结果为:

    <class 'pandas.core.frame.DataFrame'>
    RangeIndex: 458 entries, 0 to 457          # 行数,458 行,第一行编号为 0
    Data columns (total 9 columns):            # 列数,9列
     #   Column    Non-Null Count  Dtype       # 各列的数据类型
    ---  ------    --------------  -----  
     0   Name      457 non-null    object 
     1   Team      457 non-null    object 
     2   Number    457 non-null    float64
     3   Position  457 non-null    object 
     4   Age       457 non-null    float64
     5   Height    457 non-null    object 
     6   Weight    457 non-null    float64
     7   College   373 non-null    object         # non-null,意思为非空的数据    
     8   Salary    446 non-null    float64
    dtypes: float64(4), object(5)                 # 类型
    

    non-null 为非空数据,我们可以看到上面的信息中,总共 458 行,College 字段的空值最多。

    cut

    pd.cut( x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False, duplicates=’raise’, )

    apply 和 applymap

    applymap用于DataFrame中的元素级别,就是对所有元素应用某个方法;apply用于Series或DataFrame的列。

    h5py

    一个 HDF5 文件是存储两类对象的容器,这两类对象分别为:

    一个 HDF5 文件从一个命名为 “/” 的 group 开始,所有的 dataset 和其它 group 都包含在此 group 下,当操作 HDF5 文件时,如果没有显式指定 group 的 dataset 都是默认指 “/” 下的 dataset,另外类似相对文件路径的 group 名字都是相对于 “/” 的。

    HDF5 文件的 dataset 和 group 都可以拥有描述性的元数据,称作 attribute。

    用 h5py 操作 HDF5 文件,我们可以像使用目录一样使用 group,像使用 numpy 数组一样使用 dataset,像使用字典一样使用属性,非常方便和易用。

    Quick Start

    Core concepts

    HDF5文件是两种对象的容器: datasets(类似数组的数据集合) 和 groups (类似文件夹的容器,保存 datasets 和其他 group)。使用h5py时最基本的要记住的是:

    Groups 的工作方式类似于字典,而 datasets 的工作方式类似于 NumPy 数组

    假设你有一个 HDF5 文件 mytestfile.hdf5。 您需要做的第一件事是打开文件以便读取:

    >>> import h5py
    >>> f = h5py.File('mytestfile.hdf5', 'r')
    

    File 对象是您的起点。这个文件中存储了什么? 记住 h5py.File 表现就像 Python 的字典, 因此我们可以检查 keys:

    >>> list(f.keys())
    ['mydataset']
    

    根据我们的观察,在文件中有一个数据集 mydataset。 让我们将数据集设为 Dataset 对象进行检查:

    >>> dset = f['mydataset']
    

    我们得到的对象不是一个数组, 而是一个 HDF5 dataset。 就像 Numpy 数组,dataset 也有 shape 和 data type:

    >>> dset.shape
    (100,)
    >>> dset.dtype
    dtype('int32')
    

    它们还支持数组风格的切片。这就是从文件中的 dataset 读取和写入数据的方法:

    >>> dset[...] = np.arange(100)
    >>> dset[0]
    0
    >>> dset[10]
    10
    >>> dset[0:100:10]
    array([ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90])
    

    Groups and hierarchical organization

    “HDF” 表示 “Hierarchical Data Format” 。 HDF5 文件中每个对象都有一个 name, 它们使用 / 操作符以 POSIX 风格的层级结构安排:

    >>> dset.name
    '/mydataset'
    

    这个系统中的 “folders” 叫做 groups。 我们创建的 File 对象本身就是一个 group, 在这个 root group 中, name/

    >>> f.name
    '/'
    

    通过 create_group 创建一个 subgroup。 但是我们需要首先以追加模式打开文件:

    >>> f = h5py.File('mydataset.hdf5', 'a')
    >>> grp = f.create_group("subgroup")
    

    所有 Group 对象也像 File 一样有 create_* 方法:

    >>> dset2 = grp.create_dataset("another_dataset", (50,), dtype='f')
    >>> dset2.name
    '/subgroup/another_dataset'
    

    顺便说一下, 你不必手动创建所有的中间 group。你只需要指定完整路径即可:

    >>> dset3 = f.create_dataset('subgroup2/dataset_three', (10,), dtype='i')
    >>> dset3.name
    '/subgroup2/dataset_three'
    

    Group 支持大多数Python字典风格的接口。您可以使用元素检索语法在文件中检索目标:

    >>> dataset_three = f['subgroup2/dataset_three']
    

    对一个 group 进行迭代可获得其成员的 name

    >>> for name in f:
    ...     print(name)
    mydataset
    subgroup
    subgroup2
    

    成员测试也使用 names:

    >>> "mydataset" in f
    True
    >>> "somethingelse" in f
    False
    

    你也可以使用完整路径的 name

    >>> "subgroup/another_dataset" in f
    True
    

    group 也有相似的方法, 比如 keys(), values(), items()iter() 以及 get()

    因为对一个 group 迭代仅产生与它直接相连的成员, 对整个文件迭代使用 visit()visititems() 方法:

    >>> def printname(name):
    ...     print(name)
    >>> f.visit(printname)
    mydataset
    subgroup
    subgroup/another_dataset
    subgroup2
    subgroup2/dataset_three
    

    Attributes

    HDF5最好的特性之一是可以将元数据存储 和 描述它的数据 存储在一起。所有的 groupsdatasets 支持 attribute

    Atrributes 通过 attrs 代理对象获取, 它又实现了字典接口:

    >>> dset.attrs['temperature'] = 99.5
    >>> dset.attrs['temperature']
    99.5
    >>> 'temperature' in dset.attrs
    True
    

    Groups

    Datasets

    Attributes

    tricks

    打开/创建文件

    class File(name, mode=None, driver=None, libver=None, userblock_size=None, **kwds)
    

    打开或创建一个 HDF5 文件,name 为文件名字符串,mode 为打开文件的模式,driver 可以指定一种驱动方式,如需进行并行 HDF5 操作,可设置为 ‘mpio’,libver 可以指定使用的兼容版本,默认为 ‘earliest’,也可以指定为 ‘latest’,userblock_size 以字节为单位指定一个在文件开头称作 user block 的数据块,一般不需要设置。返回所打开文件的句柄。

    创建 group

    create_group(self, name, track_order=False)
    

    创建一个新的 group。以类似目录路径的形式指明所创建 group 的名字 name,如果 track_order 为 True,则会跟踪在当前 group 下的 group 和 dataset 创建的先后顺序。该方法可以在打开的文件句柄(相当于 “/” group)或者一个存在的 group 对象上调用,此时 name 的相对路径就是相对于此 group 的。

    创建 dataset

    create_dataset(self, name, shape=None, dtype=None, data=None, **kwds)
    

    创建一个新的 dataset。以类似文件路径的形式指明所创建 dataset 的名字 nameshape 以一个 tuple 或 list 的形式指明创建 dataset 的 shape,用 “()” 指明标量数据的 shape,dtype 指明所创建 dataset 的数据类型,可以为 numpy dtype 或者一个表明数据类型的字符串,data 指明存储到所创建的 dataset 中的数据。如果 data 为 None,则会创建一个空的 dataset,此时 shapedtype 必须设置;如果 data 不为 None,则 shapedtype 可以不设置而使用 data 的 shape 和 dtype,但是如果设置的话,必须与 data 的 shape 和 dtype 兼容。

    使用技巧

    读取csv文件

    pandas.read_csv(filepath_or_buffer, sep=’, ‘, delimiter=None, header=’infer’, encoding=None, …)

    iloc

    iloc按位置进行提取, 按索引提取区域行数值

    df_inner.iloc[0:5]

    loc

    loc函数按标签值进行提取, 按索引提取单行的数值

    df_inner.loc[3]

    ix

    ix可以同时按标签和位置进行提取。

    df_inner.ix[:’2013-01-03’,:4] #2013-01-03号之前,前四列数据

    pd.merge

    pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None,
             left_index=False, right_index=False, sort=True,
             suffixes=('_x', '_y'), copy=True, indicator=False,
             validate=None)
    

    参数:

    Reference

    1. HDF5 文件及 h5py
    2. pandas中apply与applymap