精华内容
下载资源
问答
  • 只要字符串Incorrect_Price保持您在示例中呈现的结构(数字不是用文字表示的),任务就可以相对容易地...两个主要的区别是,你要找的是数值“美分”或“美元”对,而且它们可能不止一出现。在import redef extrac...

    只要字符串Incorrect_Price保持您在示例中呈现的结构(数字不是用文字表示的),任务就可以相对容易地解决。在

    使用正则表达式,您可以使用similar SO question中的方法提取数字部分和可选的“cent”/“cents”或“dollar”/“dollars”。两个主要的区别是,你要找的是数值和“美分”或“美元”对,而且它们可能不止一次出现。在import re

    def extract_number_currency(value):

    prices = re.findall('(?P[\d]*[.]?[\d]{1,2})\s*(?Pcent|dollar)s?', value)

    result = 0.0

    for value, currency in prices:

    partial = float(value)

    if currency == 'cent':

    result += partial / 100

    else:

    result += partial

    return result

    print(extract_number_currency('3 dollars and 49 cent'))3.49

    现在,您需要将此函数应用于列中所有不正确的值,其中的价格为文字。为了简单起见,我在这里将其应用于所有值(但我相信您将能够处理子集):

    ^{pr2}$

    喂!在

    正则表达式的分解'(?P[\d]*[.]?[\d]{1,2})\s*(?Pcent|dollar)s?'

    有两个捕获命名为组(?P .... )

    第一个捕获组(?P[\d]*[.]?[\d]{1,2})捕获:

    [\d]-数字

    [\d]*-重复0次或更多次

    [.]?-后跟可选(?)点

    [\d]{1,2}-后跟一个重复1到2次的数字

    \s*-表示0个或更多空白

    现在第二个捕捉组要简单得多:(?Pcent|dollar)

    cent|dollar-它归结为要捕获的cent和dollar字符串之间的选择

    s?是“cents”或“dollars”的可选复数形式

    展开全文
  • 这里需要重申一下行转列和列转行的区别。有很多的贴子在介绍的时候没有严格的区分,命名介绍的是列转行该如何操作,但是帖子的标题确写的是行转列。自始至终都没有提过列转行的事情。所以,我觉的这里应该有必要做一...

    行转列与列转行的概念

    这里需要重申一下行转列和列转行的区别。有很多的贴子在介绍的时候没有严格的区分,命名介绍的是列转行该如何操作,但是帖子的标题确写的是行转列。自始至终都没有提过列转行的事情。所以,我觉的这里应该有必要做一次区别和认识。

    什么是行转列

    所谓的行转列是指把数据表中具有相同key值的多行value数据,转换为使用一个key值的多列数据,使每一行数据中,一个key对应多个value。

    行转列完成后,在视觉上的效果就是:表中的总行数减少了,但是列数增加了。

    如下所示的转换过程就是一个简单的行转列的过程:
    在这里插入图片描述

    什么是列转行

    所谓的列转行是指把表中同一个key值对应的多个value列,转换为多行数据,使每一行数据中,保证一个key只对应一个value。

    列转行完成之后,在视觉上的效果就是:表中的列数减少了,但是行数增加了。

    如下所示的转换过程就是一个简单的列转行过程:
    在这里插入图片描述

    行转列实验示例

    在进行实验之前,我们需要先准备好我们的实验环境,准备好表和表中的初始化数据。

    • 准备初始化表结构
    CREATE TABLE `student_x` (
      `id` int(11) DEFAULT NULL,
      `name` varchar(255) DEFAULT NULL,
      `class` varchar(255) DEFAULT NULL,
      `score` int(255) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
    
    • 准备初始化表中的数据
    INSERT INTO `student_x`(`id`, `name`, `class`, `score`) VALUES (1, '张三', '数学', 78);
    INSERT INTO `student_x`(`id`, `name`, `class`, `score`) VALUES (2, '张三', '英语', 93);
    INSERT INTO `student_x`(`id`, `name`, `class`, `score`) VALUES (3, '张三', '语文', 65);
    INSERT INTO `student_x`(`id`, `name`, `class`, `score`) VALUES (4, '李四', '数学', 87);
    INSERT INTO `student_x`(`id`, `name`, `class`, `score`) VALUES (5, '李四', '英语', 90);
    INSERT INTO `student_x`(`id`, `name`, `class`, `score`) VALUES (6, '李四', '语文', 76);
    INSERT INTO `student_x`(`id`, `name`, `class`, `score`) VALUES (7, '李四', '历史', 69);
    
    • 进行行转列的实验环境最后如下所示:
      在这里插入图片描述

    示例:使用聚合函数

    我们在这个示例中,使用聚合函数sum、max、min、avg来完成我们的行转列的需求,具体的实验如下。

    • 下面是我们需要完成行转列的效果图:
      在这里插入图片描述
    • 使用case when语句来拼装新的数据列
    select name,
    	case when class = '数学' then score else null end as math_score,
    	case when class = '英语' then score else null end as engilsh_score,
    	case when class = '语文' then score else null end as chinese_score,
    	case when class = '历史' then score else null end as history_score
    from student_x;
    

    在这里插入图片描述

    • 基于上面的效果图,我们需要把数据结果,按照name列进行聚合,让姓名相同的数据行合并为同一行来展示,同时,每一列的科目中,只有一行数据是有成绩的,其他行成绩都是空null,所以他们结合使用max函数,可以达到合并行,并且每列的科目成绩不会因为合并行而影响到最后的每一科目的成绩。实现上述转换的SQL语句如下:
    select name,
    	max(case when class = '数学' then score else null end) as math_score,
    	max(case when class = '英语' then score else null end) as engilsh_score,
    	max(case when class = '语文' then score else null end) as chinese_score,
    	max(case when class = '历史' then score else null end) as history_score
    from student_x
    group by name;
    

    在这里插入图片描述

    • 我们上面使用了case when语句来判断,其实if语句也可以达到case when语句的效果。如下是使用if语句的结果:
    select name,
    	max(if(class = '数学', score, null)) as math_score,
    	max(if(class = '英语', score, null)) as engilsh_score,
    	max(if(class = '语文', score, null)) as chinese_score,
    	max(if(class = '历史', score, null)) as history_score
    from student_x
    group by name;
    

    在这里插入图片描述

    • 实现过程分析
    1. 这里我们使用了聚合函数max,把每一个学生的姓名作为key,进行分组统计。
    2. 因为每一个学生对应每一门科目的成绩只有一行记录,所以我们使用聚合函数sum统计后的每一科目的成绩,仍然是该科目单独的成绩。
    3. 如果这里每一个学生对应每一门科目有多个成绩记录,这里就不能使用聚合函数max了,如果使用max,最后的结果将是每一个学生对应每一门科目成绩的最大值。
    4. 这里之所以使用max的目的是为了达到一个分组的效果。这里的max可以使用sum、min、avg等聚合函数替换掉,它们三个的效果和sum函数的效果在这里是一样的。

    总结:上面的这样的实现方式,使大家经常使用的,也是大家最熟悉的一种方式。但是这样的写法有一个问题,就是当我们的科目名称变动或者增加或者减少的时候,我们SQL语句也需要作出对应的修改。因为我们在SQL语句中已经使用了hard code硬编码的方式把科目的名称给写死了,所以这样的SQL不太灵活。

    我们可以参考使用下面的几种写法,每一种写法稍微有点不同,但是这些方式基本都能满足我们的需求。

    列转行实验示例

    在进行列转行的实验之前,我们需要先准备好我们的实验环境,准备好表和表中的初始化数据。表结构和初始化数据如下:

    • 准备初始化表结构
    CREATE TABLE `student_y` (
      `id` int(11) DEFAULT NULL, 
      `name` varchar(255) DEFAULT NULL,
      `math_score` bigint(255) DEFAULT NULL,
      `engilsh_score` bigint(255) DEFAULT NULL,
      `chinese_score` bigint(255) DEFAULT NULL,
      `history_score` bigint(255) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
    
    • 准备初始化表中的数据
    INSERT INTO `student_y`(`id`, `name`, `math_score`, `engilsh_score`, `chinese_score`, `history_score`) VALUES (1, '张三', 78, 93, 65, NULL);
    INSERT INTO `student_y`(`id`, `name`, `math_score`, `engilsh_score`, `chinese_score`, `history_score`) VALUES (2, '李四', 87, 90, 76, 69);
    
    • 进行列转行的实验环境最后如下所示:
      在这里插入图片描述

    示例:使用union all功能

    实验环境准备后之后,接下来我们开始使用union all的功能来实现列转行的功能。

    • 下面是我们需要完成行转列的效果图: 在这里插入图片描述
    • 我们可以对所有学生的每一个科目的成绩进行单独查询,结果如下:
    select name, math_score as score from student_y;
    select name, engilsh_score as score from student_y;
    select name, chinese_score as score from student_y;
    select name, history_score as score from student_y;
    

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    • 基于上面的每一个查询结果,把最后的结果使用union all关键词合并在一起,效果如下:
    select name, math_score as score from student_y
    union all
    select name, engilsh_score as score from student_y
    union all
    select name, chinese_score as score from student_y
    union all
    select name, history_score as score from student_y;
    

    在这里插入图片描述

    • 此时,我们发现结果中已经大概实现了列转为行的需求。但是顺序没有达到要求,每个人的各个科目的成绩应该挨着,但是目前是没有挨着的。所以我们需要在基于上面的查询结果,外面在包裹一层查询,增加一个order by语句在外层查询中,即可得到我们想要的顺序。如下所示:
    select * from (
    	select name, math_score as score from student_y
    	union all
    	select name, engilsh_score as score from student_y
    	union all
    	select name, chinese_score as score from student_y
    	union all
    	select name, history_score as score from student_y
    ) as x order by name;
    

    在这里插入图片描述

    • 此时的结果已经很接近我们的最后想要的结果了,但是我们发现,每个学生的成绩我们不能区分各个科目的成绩是多少,所以我们需要把科目也纳入到结果集中,也就是我们在查询的时候,要把各个成绩对应的列名称也包含到查询的字段中。于是就有了如下的SQL
    select * from (
    	select name, 'math_score' as class, math_score as score from student_y
    	union all
    	select name, 'engilsh_score' as class, engilsh_score as score from student_y
    	union all
    	select name, 'chinese_score' as class, chinese_score as score from student_y
    	union all
    	select name, 'history_score' as class, history_score as score from student_y
    ) as x order by name,class;
    

    在这里插入图片描述
    总结:这里我们采用了union all的功能,把所有学生每个科目的成绩单独查询出来,然后把结果集继续合并。最后达到我们想要的列转为行的效果。但是我们发现此时的SQL语句中,和前面我们在进行行转列的时候,使用聚合函数的方式来实现行转列的方式类似,使用了hard code的硬编码,如果科目名称或数目发生改变,我们的SQL语句也需要跟着动态的去修改,这是这种方式的缺陷。但是优点就是比较容易理解。

    最后总结

    我们在文章的开始,首选针对行和列相互转行的概念做了简单澄清,因为有很多人会把行转列和列转行给混淆。行转列和列转行的最明显的区分如下:

    行转列,最后的结果中行变少了,列变多了。
    列转行,最后的结果中列变少了,行变多了。
    紧接着,我们分别针对行转列和列转行进行了实验演示。

    展开全文
  • node项目的package.json 文件出了项目所依赖的插件库,同时也给出了对应的版本,但是在版本前面还有符号:'^'(插入符号)'~'(波浪符号),介绍下两个符号的区别: 如下图依赖 1.^插入符号 他将会把当前...

            node项目的package.json 文件列出了项目所依赖的插件和库,同时也给出了对应的版本,但是在版本前面还有符号:'^'(插入符号)和'~'(波浪符号),介绍下两个符号的区别:

    如下图依赖

    1.^插入符号

            他将会把当前库的版本更新到当前主版本(也就是第一位数字)中最新的版本。放到我们的例子中就是:"axios": "^0.18.0", 这个库会去匹配0.x.x中最新的版本,但是他不会自动更新到1.0.0。

    2.~波浪符号

            他会更新到当前次版本号(也就是中间的那位数字)中最新的版本。放到我们的例子中就是:"cross-env": "~5.2.0",这个库会去匹配更新到5.2.x的最新版本,如果出了一个新的版本为5.3.0,则不会自动升级。波浪符号是曾经npm安装时候的默认符号,现在已经变为了插入符号。

    展开全文
  • 但是指针寻址很快,所以并不会有明显的区别; 那么到底按行遍历比按遍历效率高在哪里呢? 1:CPU高速缓存 CPU高速缓存是用于减少处理器访问内存所需平均时间的部件。在金字塔存储体系中位于第二层,仅于CPU...

    按行遍历效率高

    首先数组在内存中是按行存储的,按行遍历时可以从数组首元素地址一直走下去,就可以遍历完整个数组,而按列遍历则需要每次指向每一列的第n行元素;

    但是指针寻址很快,所以并不会有明显的区别;

    那么到底按行遍历比按列遍历效率高在哪里呢?

    1:CPU高速缓存

    CPU高速缓存是用于减少处理器访问内存所需平均时间的部件。在金字塔存储体系中位于第二层,仅次于CPU寄存器;其容量远小于内存,但是速度却可以接近处理器的频率。当处理器发出访问请求时,会先查看缓存内是否有请求数据,如果存在(命中),则直接返回数据而不访问内存,如果不存在,则要先把内存中的数据载入相应缓存,在返回给处理器。
    缓存从内存中抓取一般都是整个数据块,意味着抓取到的是物理内存连续的,基本上是同行不同列的,如果采用按列遍历的话,将会使整个缓存块无法被利用,从而不得不从内存中重新读取数据,从内存中读取数据的速度远远小于从缓存中读取数据。

    2:分页调度

    物理内存是以页的方式进行划分的,当一个二维数组很大,int arr[128][1024],假设一页的内存未4096个字节,那么每一行正好占据一页。如果按列遍历,就会发生128*1024次页面调度,如果按行遍历,只有128次页面调度,页面调度是有时间调度的,因此调度次数越多,遍历时间就越长。

    展开全文
  • 如果写 np.sum() 话,表示一个数组中维数和列数所有数都加在一起,得到是一个数值。 二、np.tile() b = tile(a,(m,n)): 即是把a数组里面元素复制n放进一个数组c中,然后再把数组c复制m放进一个数组b...
  • 查询时,除复合索引第一外,别的列作为条件时,且优化器模式为CBO,这个时候查询可能会用到INDEX SKIP SCANskip scan会检测出前导列的唯一值个,每个唯一值都会作为常规扫描入口,再次基础上做一查找,最后...
  • Top K算法寻找第K个最小的数

    千次阅读 2016-01-19 19:34:46
    关于Top K算法寻找第K个最小数这种经典问题网上已经说很详细了,不过毕竟不是自己,这里自己总结一下,而且这两个问题又稍稍有点区别。 1.Top K算法:即寻找一列数中K个最小值或K个最大值,这里仅以寻找K个...
  • 1、按 MDI 单元上功能键'SYSTEM'数次,或者在按下功能键或'SYSTEM' 后,按下章节选择软键[参数],出现参数画面。2 、参数画面由页构成。可通过如下(a)、 (b)中任一方法,显示包含希望使其显示参数那一...
  • 指针数组和数组指针的区别 数组指针(也称行指针) 定义 int (*p)[n]; ()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型...
  • 题目:数组中有的数只出现1,其余数出现k,输出只...转化为k进制后由于数的大小不同,长度也有可能不同,虽然对于有k个数的数字而言求和都是0没区别,但对要求的那个数来说位序很关键,(计算时是二维数组由左到...
  • 本次优先整理locilocSQL中select是根据列的名称来选取;Pandas则更为灵活,不但可根据名称选取,还可以根据所在position(数字,在第几行第几,注意pandas行列position是从0开始)选取。相关函数如下...
  • 由于作者面试过程中高度紧张,本文中只出了自己还记得部分题目。经历了漫长一个月等待,终于在前几天通过面试官获悉已被蚂蚁金服录取,这期间...ArrayListLinkedList区别ArrayList 是一个可改变大小的数...
  • 本次优先整理locilocSQL中select是根据列的名称来选取;Pandas则更为灵活,不但可根据名称选取,还可以根据所在position(数字,在第几行第几,注意pandas行列position是从0开始)选取。相关函数如下...
  • 出现K与出现1 这题难度上升,涉及其他...转化为k进制后由于数的大小不同,长度也有可能不同,虽然对于有k个数的数字而言求和都是0没区别,但对要求的那个数来说位序很关键,(计算时是字符串是由左到右计算,而
  • 回归与分类的区别:回归y属于R,分类y属于离散集合。 数据集(分类): 每一行在机器学习中叫Sample(样本),在数据库中叫Record(记录); 每一在机器学习中叫feature(特征),在数据库中叫字段。 将方程运算...
  • 数据库ado知识

    2018-10-30 15:27:19
    筛选(Having的使用),它where的区别 类型转换(CAST,CONVERT) union,union all的使用 一插入多条数据 字符串函数 ADO.NET主要类 数据库连接字符串 SqlConnection类的State属性 SqlCommand类的方法: ...
  • 用一个二维数组来表示,行数就是物品数量,表示每次考虑一个物品,列数表示背包容量+1,因为我们需要为0背包容量 dp[i][j]就是是否可以从0到i区间中取出总量为j物品,也就是它是一个布尔值。有两种选择就是...
  • 字段个数顺序不一定与原始表中字段个数和顺序一致,但必须保证值字段一一对应 假如表中有可以为null字段,注意可以通过两种方式插入null值:①字段值都省略 ②写字段,值为null 字段个数必须一致 ...
  • 一.多重循环嵌套1.循环可以任意次数嵌套2.外层循环每执行一,里层循环就执行一遍 二.二维数组1....引用数据类型基本数据类型的区别1.基本数据类型存放的是数据,引用数据类型存放的是内存地址2.基本...
  • 上述证明注意数和矩阵的区别。 绿色表示矩阵的第一 该H-C定理表明一个矩阵的化零多项式总是存在的。 (没咋看懂) 不是每个矩阵都相似于对角阵,所以上述方式不一定行得通 这里根据上H-C定理可以...
  • excel使用

    2012-11-25 17:06:01
    实际输入时候,通常应用等差数列输入法,先输入前二个值,定出自变量中之间步长,然后选中A2A3两个单元格,使这二项变成一个带黑色边框矩形,再用鼠标指向这黑色矩形右下角小方块“■”,当光标...
  • 2.12 如何获取表格和列?....................................................................................................8 2.13 如何选中一个表?.....................................................
  • 你必须知道495个C语言问题

    千次下载 热门讨论 2015-05-08 11:09:25
    3.21 “无符号保护”“值保护”规则的区别在哪里? 第4章 指针 基本的指针应用 4.1 指针到底有什么好处? 4.2 我想声明一个指针并为它分配一些空间,但却不行。这些代码有什么问题呢?char*p;*p=malloc(10...
  • 这是一个质的区别:网页将数据显示混在一起,而XML则将数据显示分开来。 我们看上面的例子,在myfile.htm中,我们只关心页面的显示方式,我们可以设计不同的界面,用不同的方式来排版页面,但数据是储存在...
  • 3.21 “无符号保护”“值保护”规则的区别在哪里? 71 第4章 指针 74 基本的指针应用 74 4.1 指针到底有什么好处? 74 4.2 我想声明一个指针并为它分配一些空间,但却不行。这些代码有什么问题呢?char *p; *p...

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 264
精华内容 105
关键字:

列次和列数的区别