美文网首页
Data Wrangling: Join, Combine, a

Data Wrangling: Join, Combine, a

作者: python机器学习学习笔记 | 来源:发表于2019-03-25 16:42 被阅读0次

    在很多应用中,数据通常散落在不同的文件或数据库中,并不方便进行分析。 join:连接 combine:合并 reshape:整形 merge:归并 concatenate:串联 pivot:旋转 stack:堆叠

    Hierarchical Indexing(分层索引)

    Hierarchical Indexing是pandas中一个重要的特性,能让我们在一个轴(axis)上有多个index levels(索引层级)。它可以让我们在低维格式下处理高维数据。这里给出一个简单的例子,构建一个series,其index是a list of lists:

    import pandas as pd

    import numpy as np

    data = pd.Series(np.random.randn(9),

    index=[['a', 'a', 'a', 'b', 'b', 'c', 'c', 'd', 'd'],

    [1, 2, 3, 1, 3, 1, 2, 2, 3]])

    data

    a  1  -0.438701

    2    0.258622

    3  -0.430751

    b  1  -0.712747

    3  -0.576042

    c  1  -0.590258

    2  -1.194804

    d  2    0.645528

    3  -0.656554

    dtype: float64

    其中我们看到的是把MultiIndex作为index(索引)的,美化过后series。

    data.index

    MultiIndex(levels=[['a', 'b', 'c', 'd'], [1, 2, 3]],

    codes=[[0, 0, 0, 1, 1, 2, 2, 3, 3], [0, 1, 2, 0, 2, 0, 1, 1, 2]])

    对于这种分层索引对象,partial indexing(部分索引)也是能做到的,这种方法可以让我们简洁地选中数据的一部分:

    data['b']

    1  -0.712747

    3  -0.576042

    dtype: float64

    data[1]

    0.2586224816663655

    data['b':'c']

    b  1  -0.712747

    3  -0.576042

    c  1  -0.590258

    2  -1.194804

    dtype: float64

    data.loc[['b','d']]

    b  1  -0.712747

    3  -0.576042

    d  2    0.645528

    3  -0.656554

    dtype: float64

    selection(选中)对于一个内部层级(inner level)也是可能的:

    data.loc[:,2]

    a    0.258622

    c  -1.194804

    d    0.645528

    dtype: float64

    分层索引的作用是改变数据的形状,以及做一些基于组的操作(group-based)比如做一个数据透视表(pivot table)。例子,我们可以用unstack来把数据进行重新排列,产生一个DataFrame:

    data.unstack()

    123

    a-0.4387010.258622-0.430751

    b-0.712747NaN-0.576042

    c-0.590258-1.194804NaN

    dNaN0.645528-0.656554

    data.unstack().isnull().sum(axis=0)

    1    1

    2    1

    3    1

    dtype: int64

    对于dataframe,任何一个axis(轴)都可以有一个分层索引:

    frame = pd.DataFrame(np.arange(12).reshape((4,3)),

    index=[['a','a','b','b'],[1,2,1,2]],

    columns=[['Ohio', 'Ohio', 'Colorado'],

    ['Green', 'Red', 'Green']])

    每一层级都可以有一个名字(字符串或任何python对象)。如果有的话,这些会显示在输出中:

    这里我们要注意区分行标签(row label)中索引的名字'state'和'color'。

    如果想要选中部分列(partial column indexing)的话,可以选中一组列(groups of columns):

    MultiIndex能被同名函数创建,而且可以重复被使用;在DataFrame中给列创建层级名可以通过以下方式:

    Reordering and Sorting Levels(重排序和层级排序)

    有时候我们需要在一个axis(轴)上按层级进行排序,或者在一个层级上,根据值来进行排序。swaplevel会取两个层级编号或者名字,并返回一个层级改变后的新对象(数据本身并不会被改变):

    另一方面,sort_index则是在一个层级上,按数值进行排序。比如在交换层级的时候,通常也会使用sort_index,来让结果按指示的层级进行排序:

    如果index是按词典顺序那种方式来排列的话(比如从外层到内层按a,b,c这样的顺序),在这种多层级的index对象上,数据选择的效果会更好一些。这是我们调用sort_index(level=0) or sort_index()

    Summary Statistics by Level (按层级来归纳统计数据)

    在DataFrame和Series中,一些描述和归纳统计数据都是有一个level选项的,这里我们可以指定在某个axis下,按某个level(层级)来汇总。比如上面的DataFrame,我们可以按 行 或 列的层级来进行汇总:

    Indexing with a DataFrame’s columns(利用DataFrame的列来索引)

    把DataFrame里的一列或多列作为行索引(row index)是一件很常见的事;另外,我们可能还希望把行索引变为列。这里有一个例子:

    DataFrame的set_index会把列作为索引,并创建一个新的DataFrame:

    默认删除原先的列,当然我们也可以留着:

    另一方面,reset_index的功能与set_index相反,它会把多层级索引变为列:

    相关文章

      网友评论

          本文标题:Data Wrangling: Join, Combine, a

          本文链接:https://www.haomeiwen.com/subject/lfjbvqtx.html