zoukankan      html  css  js  c++  java
  • Pandas变形

    一 列值变列索引

    1.1 pivot

    pivot是把列的值变成列的索引。形象化描述就是变矮,变胖。

    pivot有三个参数:

    1.index:指定新产生的行索引
    2.columns:指定那几列的列值变列索引
    3.values:填充新产生的列值

    df = pd.DataFrame({'foo': ['one', 'one', 'one', 'two', 'two',
                               'two'],
                       'bar': ['A', 'B', 'C', 'A', 'B', 'C'],
                       'baz': [1, 2, 3, 4, 5, 6],
                       'zoo': ['x', 'y', 'z', 'q', 'w', 't']})
    df
    
    df.pivot(index='foo', columns='bar', values='baz')
    
    #不指定values,就会吧剩下的所有列作为多列组合
    df.pivot(index='foo', columns='bar')
    

    1.2 pivot_table

    如果有两行数据完全相同,那么使用pivot就会报错。

    df = pd.DataFrame({'foo': ['one', 'one', 'one', 'one', 'two',
                               'two'],
                       'bar': ['A', 'B', 'C', 'A', 'B', 'C'],
                       'baz': [1, 2, 3, 1, 5, 6]})
    df
    
    #会报错
    df.pivot(index='foo', columns='bar', values='baz')
    

    所以我们使用pivot_table代替pivot,功能和pivot一样,只是能用aggfunc聚合重复数据,margins代表汇总值

    df.pivot_table(index='foo', columns='bar', values='baz', aggfunc=np.mean, margins=True)
    

    二 列索引变列值

    melt实现。类似于pivot的反向操作,形象化描述就是变高、变瘦。

    df = pd.DataFrame({'first': ['John', 'Mary'],
                               'last': ['Doe', 'Bo'],
                               'height': [5.5, 6.0],
                               'weight': [130, 150]})
    df
    
    #id_vars表示需要保留的列,value_vars表示需要stack的一组列
    df.melt(id_vars=['first', 'last'], value_vars=['height','weight'])
    
    #指定新的列索引名字
    df.melt(id_vars=['first', 'last'], value_vars='weight',var_name='myVarname', value_name='myValname')
    

    三 行索引与列索引移动

    stack把列索引移到行索引、unstack是stack反向操作

    #多索引
    tuples = list(zip(*[['bar', 'bar', 'baz', 'baz'],
                           ['one', 'two', 'one', 'two']]))
       
    
    index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])
    
    df = pd.DataFrame(np.arange(8).reshape(4,2), index=index, columns=['A', 'B'])
    
    df
    #列索引移到行索引,列索引是单层索引,移动后没有列索引了,所以结果是Series
    df.stack()
    type(df.stack())
    
    #行索引是多层索引,移动后还是Dataframe
    df.unstack()
    

    stack和unstack有个重要的参数level:对于多层索引而言,用level指定移动哪一层索引。默认是-1,即最里面的一层。
    总结:stack、unstack与pivot、melt不同的是,stack是移动行列索引,而pivot是移动列索引和列值。

    四 Dummy Variable(哑变量)

    这里主要介绍get_dummies函数,其功能主要是进行one-hot编码。

    df = pd.DataFrame({'A': ['a', 'b', 'a'], 'B': ['b', 'a', 'c'],
                       'C': [1, 2, 3]})
    df
    pd.get_dummies(df)
    
    #可选prefix参数添加前缀,prefix_sep添加分隔符
    pd.get_dummies(df, prefix='col', prefix_sep='+')
    

    Pandas get_dummies 与 Sklearn OneHotEncoder区别:

    sklearn.preprocessing 下的 OneHotEncoder 不可以直接处理 string,如果数据集中的某些特征是 string 类型的话,需要首先将其转换为 integers 类型
    OneHotEncoder 实例的 fit 方法将不再接收 1 维数组,而必须是显式的二维形式,get_dummies则都可以
    如果没有特殊需求,推荐使用get_dummies

    五 factorize(因子化)

    factorize方法,该方法主要用于自然数编码,并且缺失值会被记做-1,其中sort参数表示是否排序后赋值

    codes, uniques = pd.factorize(['b', None, 'a', 'c', 'b'], sort=True)
    codes
    uniques
    
  • 相关阅读:
    记一次 .NET 某智能服装智造系统 内存泄漏分析
    记一次 .NET 某化妆品 webapi 卡死分析
    记一次 .NET 某公交卡扣费系统 程序卡死分析
    去掉烦人的:要恢复页面吗?Chrome未正确关闭
    C#Excel转图片代码
    ArcEngine实现pagelayout中文本元素的属性对话框
    arcgis 模型版本问题最大
    Arcengine开发所遇错误解决方案(持续更新)
    ArcEngine IPageLayout 添加经纬网和公里网
    Arcengine的复制粘贴
  • 原文地址:https://www.cnblogs.com/wenqihe/p/14198743.html
Copyright © 2011-2022 走看看