精华内容
下载资源
问答
  • 一维表
    千次阅读
    2020-11-12 22:52:24

    用pandas处理数据,我们经常获取到的是从数据库或者excel中获取的一维表。而常常需要重排,转换为二维表,类似于excel中的透视。

    举例
    一维表 df

    df = pd.DataFrame(
    {
        'key1':['one','two','three','one','two','four'],
        'key2':['A','B','C','D','C','D'],
        'value':np.random.randn(6)
    }
    )
    

    表一:一维表
    二维表 df2
    在这里插入图片描述

    介绍两种转换方式。

    一、stack & unstack

    stack 和 unstack 的工作机制都是依赖于dataframe本身的多层索引进行转换的。
    默认情况下,最内层是unstack的,也可以指定层级序号或名称来拆分特定层级。

    unstack 将一维表转换为二维表

    # 第一步
    df1 =df.set_index(['key1','key2'])
    # 运用unstack,不写参数,默认转换最里层的index,也就是key2;
    df2=df1.unstack()
    df2.reset_index()
    

    在这里插入图片描述

    # 也可以指定要转换的索引
    df1.unstack('key1')
    # 或
    df1.unstack(0)
    

    最后,可以通过reset_index方法去除索引。

    stack 将二维表转换为一维表

    df2.stack()
    

    二、pivot & melt

    pivot 将一维表转换为二维表

    df.pivot('key1','key2','value')
    

    melt将二维表转换为一维表

    pd.melt(df,['key1','key2'])
    

    也可以指定列的子集为值列

    pd.melt(df,id_vars=['key1'], value_vars=['value'])
    

    Tips

    stack 和unstack方法可以用来处理多层数据。
    也就是行和列索引不只一个的情况。

    可参考 (https://blog.csdn.net/qq_41080850/article/details/86294173)

    multiindex 的索引方式

    外层索引可以包含式地使用内层索引,反过来则不行

    更多相关内容
  • 数据分析时,同事经常给你份二维表,是不是分分钟有想哭的冲动,大堆的东西在块,怎么透视?想要做进一步分析,也是特别麻烦。今天给你种方便的方法。、入门版先来看看可能要处理的文件是什么样的?看看,...

    数据分析时,同事经常给你一份二维表,是不是分分钟有想哭的冲动,一大堆的东西在一块,怎么透视?想要做进一步分析,也是特别麻烦。今天给你一种方便的方法。

    一、入门版

    先来看看可能要处理的文件是什么样的?

    5a09b4aa5fb2

    看看,别提多闹心了。当然我们不可能一开始就处理这么复杂的样式。先来个简单的验证一下。

    5a09b4aa5fb2

    如上这样一个二维数据,怎么变成一维数据呢?

    excel中可以这样操作

    选择数据透视表,快捷键alt+d+p,这里是用wps的演示的,用office是一样的效果

    5a09b4aa5fb2

    选择多重合并计算区域

    5a09b4aa5fb2

    创建单面字段

    5a09b4aa5fb2

    选择数据区域

    5a09b4aa5fb2

    添加数据区域

    5a09b4aa5fb2

    点击完成,默认新工作表确定

    5a09b4aa5fb2

    这样一个数据透视表就出现了

    5a09b4aa5fb2

    到这时,读者可能想,还是没有变成一维表呀,这不依然是二维表。别急,还有下面的关键步骤。

    在透视表的区域里去除行和列的数据,只保留值的区域

    5a09b4aa5fb2

    改变前

    5a09b4aa5fb2

    改变后

    这是我们的数据透视表变成了这样:

    5a09b4aa5fb2

    双击数值,我们这里就是这个6762

    5a09b4aa5fb2

    这时就进入了这样一个界面,相信细心的朋友一定能发现这里正好就是我们要的二维数据了,复制整个内容,更改一下列名。

    5a09b4aa5fb2

    让我们头痛的二维表就这样变成了一维表。

    二、进阶版

    完成了这样一个简单的验证,我们再来考虑一下我们开头提到的复杂样式?这个该怎么处理呢?是不是也可以用这种方法解决呢?

    先试一试

    5a09b4aa5fb2

    好像没那么管用了,我们希望的是二级区域,业务员,类型这些也能像一级大区这样展开,可是这里却混在了一起。这可怎么办呢?

    Pandas来救场

    熟悉python的应该知道,python经常被说成是数据分析的好工具,但是其实python能进入数据分析领域,pandas才是其中最大的功臣,pandas和numpy成为python数据分析最大的法宝。这里我们就要用到pandas的一个很方便的功能。

    引入相关包

    # 引入相关包

    import pandas as pd

    import numpy as np

    读入文件

    # 读入文件

    file = r"E:\销售数据报表项目\医美专题\2dims.xlsx"

    df = pd.read_excel(file)

    df.head()

    数据输出:

    一级大区 二级区域 业务员 型号 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月

    0 南区 浙南区域 name1 type1 222.392385 110.46942 207.566226 208.341450 234.989775 244.680075 239.834925 249.525225 205.918875 276.17355 296.52318 290.709

    1 南区 浙南区域 name1 type2 52.166115 25.91258 48.688374 48.870217 55.121058 57.394092 56.257575 58.530608 48.301958 64.78145 69.55482 68.191

    2 南区 浙南区域 name2 type1 866.394630 430.36596 808.634988 811.655100 915.471450 953.222850 934.347150 972.098550 802.217250 1075.91490 1155.19284 1132.542

    3 南区 浙南区域 name2 type2 203.228370 100.95004 189.679812 190.388233 214.740217 223.595483 219.167850 228.023117 188.174417 252.37510 270.97116 265.658

    4 南区 浙南区域 name3 type1 1280.382795 636.00714 1195.023942 1199.487150 1352.909925 1408.700025 1380.804975 1436.595075 1185.539625 1590.01785 1707.17706 1673.703

    可以看到,和我们在excel里看到的内容是一致的。

    下面我们就要开始变换处理了。

    变换处理

    # 变换处理

    df1 = df.set_index(['一级大区','二级区域','业务员','型号'])

    df2 = df1.stack()

    df3 = df2.reset_index()

    df3.columns = ['primary_area', 'sub_area', 'sales_man',

    'product_specifications', 'month', 'target']

    df3

    数据输出:

    primary_area sub_area sales_man product_specifications month target

    0 南区 浙南区域 name1 type1 1月 222.392385

    1 南区 浙南区域 name1 type1 2月 110.469420

    2 南区 浙南区域 name1 type1 3月 207.566226

    3 南区 浙南区域 name1 type1 4月 208.341450

    4 南区 浙南区域 name1 type1 5月 234.989775

    5 南区 浙南区域 name1 type1 6月 244.680075

    6 南区 浙南区域 name1 type1 7月 239.834925

    7 南区 浙南区域 name1 type1 8月 249.525225

    8 南区 浙南区域 name1 type1 9月 205.918875

    9 南区 浙南区域 name1 type1 10月 276.173550

    10 南区 浙南区域 name1 type1 11月 296.523180

    11 南区 浙南区域 name1 type1 12月 290.709000

    12 南区 浙南区域 name1 type2 1月 52.166115

    ...

    3405 北区 山东大区 name140 type2 10月 127.680000

    3406 北区 山东大区 name140 type2 11月 137.088000

    3407 北区 山东大区 name140 type2 12月 134.400000

    3408 rows × 6 columns

    可以看到,二维表已经变成了我们想要的一维表了。

    这中间到底发生了什么魔法?

    我们来解释下刚刚的代码:

    # 变换处理开始

    # 首先把数据df设置成多项索引,就像下面这样

    df1 = df.set_index(['一级大区','二级区域','业务员','型号'])

    # 然后把二维表格变成堆叠样式

    df2 = df1.stack()

    # 再把堆叠样式的数据重建索引

    df3 = df2.reset_index()

    # 我们把原来一行的内容转变成一列了,系统当然不知道应该叫什么,

    # 所以我们这里要给新出现的列命名,这里为了方便后面分析使用,

    # 直接给所有列重命名成英文

    df3.columns = ['primary_area', 'sub_area', 'sales_man',

    'product_specifications', 'month', 'target']

    # 那么为什么要生成df1,2,3呢? 这是为了覆盖原数据,防止我们误操作了没法复原

    再来看看,每次变更后的数据是怎么样的:

    # 设置多项索引后

    In: df1

    Out:

    1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月

    一级大区 二级区域 业务员 型号

    南区 浙南区域 name1 type1 222.392385 110.469420 207.566226 208.341450 234.989775 244.680075 239.834925 249.525225 205.918875 276.17355 296.52318 290.709

    type2 52.166115 25.912580 48.688374 48.870217 55.121058 57.394092 56.257575 58.530608 48.301958 64.78145 69.55482 68.191

    name2 type1 866.394630 430.365960 808.634988 811.655100 915.471450 953.222850 934.347150 972.098550 802.217250 1075.91490 1155.19284 1132.542

    type2 203.228370 100.950040 189.679812 190.388233 214.740217 223.595483 219.167850 228.023117 188.174417 252.37510 270.97116 265.658

    name3 type1 1280.382795 636.007140 1195.023942 1199.487150 1352.909925 1408.700025 1380.804975 1436.595075 1185.539625 1590.01785 1707.17706 1673.703

    type2 300.336705 149.186860 280.314258 281.361183 317.349242 330.435808 323.892525 336.979092 278.089542 372.96715 400.44894 392.597

    name4 type1 891.738315 442.954980 832.289094 835.397550 942.250725 981.106425 961.678575 1000.534275 825.683625 1107.38745 1188.98442 1165.671

    type2 209.173185 103.903020 195.228306 195.957450 221.021775 230.136075 225.578925 234.693225 193.678875 259.75755 278.89758 273.429

    浙北区域 name5 type1 644.436000 320.112000 601.473600 603.720000 680.940000 709.020000 694.980000 723.060000 596.700000 800.28000 859.24800 842.400

    type2 151.164000 75.088000 141.086400 141.613333 159.726667 166.313333 163.020000 169.606667 139.966667 187.72000 201.55200 197.600

    name6 type1 619.650000 307.800000 578.340000 580.500000 654.750000 681.750000 668.250000 695.250000 573.750000 769.50000 826.20000 810.000

    # 改成堆叠样式后

    In:df2

    Out:

    一级大区 二级区域 业务员 型号

    南区 浙南区域 name1 type1 1月 222.392385

    2月 110.469420

    3月 207.566226

    4月 208.341450

    5月 234.989775

    6月 244.680075

    7月 239.834925

    8月 249.525225

    9月 205.918875

    10月 276.173550

    11月 296.523180

    12月 290.709000

    type2 1月 52.166115

    2月 25.912580

    3月 48.688374

    4月 48.870217

    5月 55.121058

    6月 57.394092

    7月 56.257575

    8月 58.530608

    9月 48.301958

    10月 64.781450

    11月 69.554820

    12月 68.191000

    name2 type1 1月 866.394630

    2月 430.365960

    有点像是大括号括起来的效果。不过这里可以看到月份和销售额是没有列名的。

    # 这里为了演示,又重新建了一个df,

    # 因为前面df3已经重命名列名了

    In: df4 = df2.reset_index()

    df4

    Out:

    一级大区 二级区域 业务员 型号 level_4 0

    0 南区 浙南区域 name1 type1 1月 222.392385

    1 南区 浙南区域 name1 type1 2月 110.469420

    2 南区 浙南区域 name1 type1 3月 207.566226

    3 南区 浙南区域 name1 type1 4月 208.341450

    4 南区 浙南区域 name1 type1 5月 234.989775

    5 南区 浙南区域 name1 type1 6月 244.680075

    6 南区 浙南区域 name1 type1 7月 239.834925

    7 南区 浙南区域 name1 type1 8月 249.525225

    8 南区 浙南区域 name1 type1 9月 205.918875

    9 南区 浙南区域 name1 type1 10月 276.173550

    10 南区 浙南区域 name1 type1 11月 296.523180

    11 南区 浙南区域 name1 type1 12月 290.709000

    可以看到,前面的一级大区,二级区域这些内容被填充上内容了。但是月份和销售额还是没有列名。

    In: df4.columns = ['primary_area', 'sub_area', 'sales_man',

    'product_specifications', 'month', 'target']

    df4

    Out:

    primary_area sub_area sales_man product_specifications month target

    0 南区 浙南区域 name1 type1 1月 222.392385

    1 南区 浙南区域 name1 type1 2月 110.469420

    2 南区 浙南区域 name1 type1 3月 207.566226

    3 南区 浙南区域 name1 type1 4月 208.341450

    这样就完成了一个多项索引的二维表到一维表的转换。可以看到使用pandas方便快捷,最关键的是能处理excel不太方便的地方。

    后记

    到这里,今天的内容已经完结了,可能还有朋友说,你标题不是说的要讲一维表和二维表相互转换吗?怎么只讲了二维表到一维表?其实一维表到二维表是最简单的内容,在excel里主要涉及到就是透视表,而pandas也提供了类似透视表的功能, 那就是pivot_table函数。这个就可以留给朋友们自己去研究了。如果有需要可以关注公众号留言给我,我们在一篇文章里再讲讲。

    展开全文
  • excel二维表转化为一维表

    千次阅读 2021-03-03 18:20:36
    1、什么是二维表和一维表 二维表即表中有两个维度,纵向维度的哪列值唯一 一维表即只有列名一个维度 2、 添加工具并转换 我们需要添加【数据透视表和数据透视图向导】功能来完成,如果已经设置可以忽略...

    1、什么是二维表和一维表

    二维表即表中有两个维度,纵向维度的哪列值唯一

    一维表即只有列名一个维度

     

    2、 添加工具并转换

          我们需要添加【数据透视表和数据透视图向导】功能来完成,如果已经设置可以忽略这步

          文件--选项--自定义功能区--不在功能区的命令--数据透视表和数据透视图向导--在数据中加一个新建组--添加--确定

    数据--数据透视表和数据透视图向导--多重合并计算数据区域--数据透视表--下一步

    就会出现一个透视表

    取消行和列 

    然后复制粘贴就可以得到新的表了

     

     

     

     

     

    展开全文
  • WPS中Excel二维表转一维表

    千次阅读 2019-11-07 16:43:17
    WPS中Excel二维表转一维表一、如何区分一维表和二维表?二、为什么要将二维表转换为一维表?三、如何将二维表转换成一维表? 一、如何区分一维表和二维表? 首先看下以下两张表有什么区别?你能快速有效的区分出哪...

    一、如何区分一维表和二维表?

    首先看下以下两张表有什么区别?你能快速有效的区分出哪张表才是真的一维表吗,那哪张表又是二维表呢?
    在这里插入图片描述
    在这里插入图片描述
    首先我们要明确一个概念,一维表/二维表中的维,均指维度。
    从表1-1来看,列中包含了地区、2006年、2007年、2008年四个字段,其中2006年、2007年、2008年均可归纳为年份字段。
    从表1-2来看,列中包含了地区、年份、产值三个字段,三个字段互不重复。每个字段可代表一个维度。
    由此可见,表1-1则为二维表,表1-2则为我们常说的一维表。

    二、为什么要将二维表转换为一维表?

    既然一维表和二维表都可以将数据进行整理展示,那我们为什么要将二维表转换为一维表呢?
    因为一位表能够更加直观的展现数据,方便分析各维度的数据情况,所以在数据分析时,将二维表转换成一维表是个非常好的选择。

    三、如何将二维表转换成一维表?

    在Excel中若要将二维表转换成一维表则需要用到数据透视表和数据视图这个工具
    唤起该工具的快捷键为Alt+D+P,若在工具栏中找不到该工具可参照如下方式,若可直接找到则可忽视下方准备工作
    准备工作:
    在这里插入图片描述
    在这里插入图片描述
    找到数据透视表和数据透视图并选中
    在这里插入图片描述
    右侧自定义功能区中新建组,将“数据透视表和数据透视图”添加到右侧新建组中
    在这里插入图片描述
    点击确定保存后即可在工具栏中进行查找(可使用快捷键)
    在这里插入图片描述
    准备工作做完后我们即可进行转换操作
    二维表转一维表
    点击“数据透视表和数据透视图"出现如图弹窗
    在这里插入图片描述
    勾选“使用多重合并计算区域”,如下图
    在这里插入图片描述
    点击选定区域如下图
    在这里插入图片描述
    点击选定区域后出现下图弹窗,选择“创建单页字段”然后点击“下一步”
    在这里插入图片描述
    输入需要分析数据的选定区域,可直接框选数据表,然后点击确定
    在这里插入图片描述
    这里我们可选择使用数据透视图/数据透视表,亦可在现有表中对数据进行分析或在新的表中对所选数据进行分析,再次我所选用的是在新的工作表中创建数据透视表的形式
    在这里插入图片描述
    新表如下图所示
    在这里插入图片描述
    我们勾选掉字段列表中的行和列,如下图
    在这里插入图片描述
    双击表中数值即可得到一维数据表
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 对已有数据表进行一维和二维之间的转化: import pandas as pd ...如上图所示df是一个二维表。 # 将二维数据表转化为一维数据表: new_data = df.set_index('地区') # 将df中的地区一列设置为索引列 df1 = new_...
  • python 转Excel二维表为一维表

    千次阅读 2018-11-21 12:13:46
    今天研究一下使用python怎么把excel二维表转化为一维表。文件名为二维表.xlsx的Sheet1数据源: 二维表.xlsx的Sheet2要实现的结果: import pandas as pd df=pd.read_excel('二维表.xlsx',sheet_name='Sheet1'...
  • 什么是一维表 什么是二维表

    千次阅读 2019-08-02 14:31:07
    一维表:是只有1行数据的? 只有2个列的?是空间上一维的,线的概念?NO 二维表:是空间上二维的,面的概念?NO 准确概念辨析 表:基础概念,1行是1条数据,1列是1个属性 只要是表,从空间上看都是二维的 从...
  • wps中将二维表转换为一维表

    千次阅读 2020-01-04 15:49:07
    1、打开wps, 文件->选项->自定义功能区 可以重命名,我这里重命名为数据透视表 原数据 点击选择区域,,如下图,点击下一步 选定区域后,点击完成。...出现了如下的一维表 ...
  • excel2016 for mac 二维表转一维表

    千次阅读 2019-03-06 22:32:51
    数据分析过程中,对一维表进行数据处理比对二维表方便,因此经常需要用到二维表转一维表的操作。《谁说菜鸟不懂数据分析》一书以及网络上能查到的有两种方法:一是利用数据透视表和数据透视图向导(包括用“ALT+D+P...
  • Step3:完成后,出现一个数据透视表,双击右下角总计单元格,在新的sheet里面产生一张一维表。 如果双击不出,则右击-数据透视表选项-勾选启用显示明细数据 二、查询编辑器 Step1.将数据区域转化成表格 ...
  • python一维表二维表转化

    千次阅读 2019-04-24 13:03:14
    效果: ...import pandas as pd ...df = pd.read_excel(r'C:\Users\lihwa11\Desktop\Python\...# 将二维数据转化为一维数据: new_data = df.set_index('地区') # 将df中的地区一列设置为索引列 df1 = new_...
  • 把它变成如下一维表 第一步:向二维表插入透视表 第二步:选择所需字段 第三步:如图,把列区间中的数值拉到行区间最后面 第四步:点击报表布局–点击以表格形式显示–再点击重复所有标签项目 第五步:点击分类汇总...
  • 一维表和交叉表的转化

    千次阅读 2018-05-17 10:15:09
    一维表转化为交叉表通过制作数据透视表,合理分布行和列的内容,生成交叉表。(1)原始表(2)生成透视表,设置字段显示形式(3)透视表结果如下:(4)交叉表结果为:交叉表转化为一维表(1)原始表(2)制作数据...
  • 什么是一维表,什么是二维表?和数组的1维,2维 不是一回事 错误概念: 一维表:是只有1行数据的? 只有2个列的? 是空间上一维的,线的概念? NO,这是1维数组 二维表:是空间上二维的,面的概念? NO ,这是2...
  • 一维表转二维表(mysql)

    千次阅读 2017-11-23 21:12:52
    /*创建结构*/ INSERT INTO tmp0103.temp_test VALUES ( '1' , 'math' , '90' , '1' ); INSERT INTO tmp0103.temp_test VALUES ( '2' , 'english' , '90' , '1' ); INSERT INTO tmp0103....
  • 一维表的列标签是字段,而二维表的列表签是数据。 如下表中的数据,从数据的角度来讲,2011年-2015年这些列,都属于“年份”的范畴。 转换过程及结果: 使用快捷键Alt+D+P打开数据透视表对话框,依次操作。 注意...
  • Excel:一维表和二维表 互转

    千次阅读 2017-02-14 13:43:45
    一、一维表转二维表 数据源: 一份流水账式的值班表,为了便于打印张贴,现在需要使其变成这样的样式: 也就是从一维表变成传说中的二维表。 一、新建查询 依次单击【数据】→【新建查询】 →【从...
  • 数据建模中的二维表和一维表

    千次阅读 2012-05-04 22:19:36
    什么是表/一维表/二维表,哪位给个准确的定义 [复制链接] <!-- .pcb {margin-right:0} --> 透视表要求是一维表, 那什么是表、一维表、二维表呢?查了一下午也没有找到准确的定义, 把找到...
  • 何谓一维表、二维表

    万次阅读 2012-08-31 13:25:36
    :经常看到关于一维表转为二维表、二维表转为一维列表等说法,那么,什么是“一维表”、“二维表”呢? A:从数据库的观点来说,一维表是最合适于透视和数据分析的数据存储结构。 很多人容易将它与一维数组、二维...
  • 效果如下所示,通过该方法可以使一张二维的数据转换为一维的简单数据明细,以便使用数据透视做统计分析。 该方法主要是利用《数据透视和数据透视图向导》这一工具实现的,首先需要在excel中找到这一工具 ...
  • 我再工作中遇到一个问题,就是一维表如何转换为二维表格。例如有如下数据库表 表名:item idint--主键自动增长 itemNamevarchar(50)--名称 表名:itemUse idint--主键自动增长 otherID--其他外键 itemID--item表的...
  • 如何把二维表转成一维表

    千次阅读 2018-01-10 16:56:59
    数据透视表除了能将一维表转成二维表,同样也可以二维表转成一维表。看如何用透视表将以下二维表转成一维表。 工具/原料 EXCEL2007 方法/步骤 ...
  • C# 一维数组与二维数组相互转换

    千次阅读 2021-04-15 01:40:03
      本文就这么朴实无华且枯燥地向大家分享C#中: 一维数组 与 二维数组 的相互转换(一维→二维;二维→一维)……希望能帮到有需求的小伙伴(*^▽^*)。全文完整代码(直接复制运行)如下: using System; ...
  • 一维表转换成二维表

    千次阅读 2008-09-05 11:08:00
    晚上回到宿舍,舍友问起我今天他们笔试的一个题目: 如何把一个一维表转换成二维表 SQL查询该如何写呢? 一维表table a如下: 年级 课目 人数
  • 如题,我们直接使用numpy #!D:/workplace/python # -*- coding: utf-... 以上这篇python实现将一维列表转换为多维列表(numpy+reshape)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。
  • python一维列表与二维列表互相转换

    千次阅读 2021-04-19 15:06:12
    一维列表转化为二维列表 a = [1,2,3,4] b = [0,2,4,6] c = list(zip(a,b)) [(1, 0), (2, 2), (3, 4), (4, 6)] 二维列表转化为一维列表 from tkinter import _flatten a = [[1, 2], [3, 4]] print(list(_flatten(a)...
  • Excel二维交叉表恢复为一维表

    千次阅读 2012-06-29 10:54:43
    工作中遇到这样的问题,收到Excel二维交叉表(数据透视表的结果,但已经保存为普通Excel),根据业务需要将其再次恢复为一维表。 如果数据量小的话,简单的复制剪切就可以了,如果数据量大的话,那么太繁琐了。  ...
  • linux 进阶2--C++读取lua文件中的变量、一维表、二维表

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 460,779
精华内容 184,311
关键字:

一维表

友情链接: 源码.zip