精华内容
下载资源
问答
  • Pandas 的位置和列名
    2020-07-24 16:28:50

    根据列名获取列的位置:
    df.get_loc('name')
    根据列的位置获取列名
    df[df.columns[position]]

    更多相关内容
  • MAX(IF(c.coursenm = '高等数学(二)', s.scores, 0)) AS '高等数学(二)' 对,没错,就是我们上面进行行转查询要用的语句,那样就不用知道多少课程这些课程的名字,只要这样几行代码便可以得到动态的了。...
    数据表结构

    三张表:学生表、课程表、成绩表

     

     
    1. CREATE TABLE `student` (

    2. `stuid` VARCHAR(16) NOT NULL COMMENT '学号',

    3. `stunm` VARCHAR(20) NOT NULL COMMENT '学生姓名',

    4. PRIMARY KEY (`stuid`)

    5. )

    6. COLLATE='utf8_general_ci'

    7. ENGINE=InnoDB;

     
    1. CREATE TABLE `courses` (

    2. `courseno` VARCHAR(20) NOT NULL,

    3. `coursenm` VARCHAR(100) NOT NULL,

    4. PRIMARY KEY (`courseno`)

    5. )

    6. COMMENT='课程表'

    7. COLLATE='utf8_general_ci'

    8. ENGINE=InnoDB;

    • 成绩表

     
    1. CREATE TABLE `score` (

    2. `stuid` VARCHAR(16) NOT NULL,

    3. `courseno` VARCHAR(20) NOT NULL,

    4. `scores` FLOAT NULL DEFAULT NULL,

    5. PRIMARY KEY (`stuid`, `courseno`)

    6. )

    7. COLLATE='utf8_general_ci'

    8. ENGINE=InnoDB;

    以上就是数据库表的结构,没有建立外键,但是可以看到成绩表中关联关系

    知识点: innodb和myisam的区别

     

    InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。
    
        以下是一些细节和具体实现的差别:
        ◆1.InnoDB不支持FULLTEXT类型的索引。
        ◆2.InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含 where条件时,两种表的操作是一样的。
        ◆3.对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引。
        ◆4.DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除。
        ◆5.LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用。
        另外,InnoDB表的行锁也不是绝对的,假如在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如update table set num=1 where name like “%aaa%”
        两种类型最主要的差别就是Innodb 支持事务处理与外键和行级锁.而MyISAM不支持.所以MyISAM往往就容易被人认为只适合在小项目中使用。

    数据准备

     
    1. /*学生表数据*/

    2. Insert Into student (stuid, stunm) Values('1001', '张三');

    3. Insert Into student (stuid, stunm) Values('1002', '李四');

    4. Insert Into student (stuid, stunm) Values('1003', '赵二');

    5. Insert Into student (stuid, stunm) Values('1004', '王五');

    6. Insert Into student (stuid, stunm) Values('1005', '刘青');

    7. Insert Into student (stuid, stunm) Values('1006', '周明');

     
    1. /*课程表数据*/

    2. Insert Into courses (courseno, coursenm) Values('C001', '大学语文');

    3. Insert Into courses (courseno, coursenm) Values('C002', '新视野英语');

    4. Insert Into courses (courseno, coursenm) Values('C003', '离散数学');

    5. Insert Into courses (courseno, coursenm) Values('C004', '概率论与数理统计');

    6. Insert Into courses (courseno, coursenm) Values('C005', '线性代数');

    7. Insert Into courses (courseno, coursenm) Values('C006', '高等数学(一)');

    8. Insert Into courses (courseno, coursenm) Values('C007', '高等数学(二)');

     
    1. /*成绩表数据*/

    2. Insert Into score(stuid, courseno, scores) Values('1001', 'C001', 67);

    3. Insert Into score(stuid, courseno, scores) Values('1002', 'C001', 68);

    4. Insert Into score(stuid, courseno, scores) Values('1003', 'C001', 69);

    5. Insert Into score(stuid, courseno, scores) Values('1004', 'C001', 70);

    6. Insert Into score(stuid, courseno, scores) Values('1005', 'C001', 71);

    7. Insert Into score(stuid, courseno, scores) Values('1006', 'C001', 72);

    8. Insert Into score(stuid, courseno, scores) Values('1001', 'C002', 87);

    9. Insert Into score(stuid, courseno, scores) Values('1002', 'C002', 88);

    10. Insert Into score(stuid, courseno, scores) Values('1003', 'C002', 89);

    11. Insert Into score(stuid, courseno, scores) Values('1004', 'C002', 90);

    12. Insert Into score(stuid, courseno, scores) Values('1005', 'C002', 91);

    13. Insert Into score(stuid, courseno, scores) Values('1006', 'C002', 92);

    14. Insert Into score(stuid, courseno, scores) Values('1001', 'C003', 83);

    15. Insert Into score(stuid, courseno, scores) Values('1002', 'C003', 84);

    16. Insert Into score(stuid, courseno, scores) Values('1003', 'C003', 85);

    17. Insert Into score(stuid, courseno, scores) Values('1004', 'C003', 86);

    18. Insert Into score(stuid, courseno, scores) Values('1005', 'C003', 87);

    19. Insert Into score(stuid, courseno, scores) Values('1006', 'C003', 88);

    20. Insert Into score(stuid, courseno, scores) Values('1001', 'C004', 88);

    21. Insert Into score(stuid, courseno, scores) Values('1002', 'C004', 89);

    22. Insert Into score(stuid, courseno, scores) Values('1003', 'C004', 90);

    23. Insert Into score(stuid, courseno, scores) Values('1004', 'C004', 91);

    24. Insert Into score(stuid, courseno, scores) Values('1005', 'C004', 92);

    25. Insert Into score(stuid, courseno, scores) Values('1006', 'C004', 93);

    26. Insert Into score(stuid, courseno, scores) Values('1001', 'C005', 77);

    27. Insert Into score(stuid, courseno, scores) Values('1002', 'C005', 78);

    28. Insert Into score(stuid, courseno, scores) Values('1003', 'C005', 79);

    29. Insert Into score(stuid, courseno, scores) Values('1004', 'C005', 80);

    30. Insert Into score(stuid, courseno, scores) Values('1005', 'C005', 81);

    31. Insert Into score(stuid, courseno, scores) Values('1006', 'C005', 82);

    32. Insert Into score(stuid, courseno, scores) Values('1001', 'C006', 77);

    33. Insert Into score(stuid, courseno, scores) Values('1002', 'C006', 78);

    34. Insert Into score(stuid, courseno, scores) Values('1003', 'C006', 79);

    35. Insert Into score(stuid, courseno, scores) Values('1004', 'C006', 80);

    36. Insert Into score(stuid, courseno, scores) Values('1005', 'C006', 81);

    37. Insert Into score(stuid, courseno, scores) Values('1006', 'C006', 82);

    为什么要行转列

    上面是进行成绩查询的时候看到的纵列的结果,但是我们想要的是下面的结果

    那么需要这样的结果就要进行行转列来操作了。

    静态行转列

     
    1. Select st.stuid, st.stunm,

    2. MAX(CASE c.coursenm WHEN '大学语文' THEN s.scores ELSE 0 END ) '大学语文',

    3. MAX(CASE c.coursenm WHEN '新视野英语' THEN ifnull(s.scores,0) ELSE 0 END ) '新视野英语',

    4. MAX(CASE c.coursenm WHEN '离散数学' THEN ifnull(s.scores,0) ELSE 0 END ) '离散数学',

    5. MAX(CASE c.coursenm WHEN '概率论与数理统计' THEN ifnull(s.scores,0) ELSE 0 END ) '概率论与数理统计',

    6. MAX(CASE c.coursenm WHEN '线性代数' THEN ifnull(s.scores,0) ELSE 0 END ) '线性代数',

    7. MAX(CASE c.coursenm WHEN '高等数学(一)' THEN ifnull(s.scores,0) ELSE 0 END ) '高等数学(一)',

    8. MAX(CASE c.coursenm WHEN '高等数学(二)' THEN ifnull(s.scores,0) ELSE 0 END ) '高等数学(二)'

    9. From Student st

    10. Left Join score s On st.stuid = s.stuid

    11. Left Join courses c On c.courseno = s.courseno

    12. Group by st.stuid

    看上面的语句可以看出,我们是在知道固定的几门课程之后,可以使用

    MAX(CASE c.coursenm WHEN '线性代数' THEN ifnull(s.scores,0) ELSE 0 END ) '线性代数',

    这样的语句来实现行转列

    但我们都知道,课程不仅仅这几门,如果用上面的语句去写,第一要确定有多少课程,这么多课程的课程名要再拿出来,那样的话写一个查询语句下来,可是要写很多了。那么就想能不能动态进行行转列的操作?答案当然是肯定的了!

    动态行转列

    那么如何进行动态行转列呢?

    首先我们要动态获取这样的语句

     
    1. MAX(CASE c.coursenm WHEN '大学语文' THEN s.scores ELSE 0 END ) '大学语文',

    2. MAX(CASE c.coursenm WHEN '线性代数' THEN ifnull(s.scores,0) ELSE 0 END ) '线性代数',

    3. MAX(CASE c.coursenm WHEN '离散数学' THEN ifnull(s.scores,0) ELSE 0 END ) '离散数学'

    而不是像上面那样一句句写出来,那如何得到这样的语句呢?

    这里就要用到SQL语句拼接了。具体就是下面的语句

     
    1. SELECT

    2. GROUP_CONCAT(DISTINCT

    3. CONCAT(

    4. 'MAX(IF(c.coursenm = ''',

    5. c.coursenm,

    6. ''', s.scores, 0)) AS ''',

    7. c.coursenm, ''''

    8. )

    9. )

    10. FROM courses c;

    得到的结果就是

     
    1. MAX(IF(c.coursenm = '大学语文', s.scores, 0)) AS '大学语文',

    2. MAX(IF(c.coursenm = '新视野英语', s.scores, 0)) AS '新视野英语',

    3. MAX(IF(c.coursenm = '离散数学', s.scores, 0)) AS '离散数学',

    4. MAX(IF(c.coursenm = '概率论与数理统计', s.scores, 0)) AS '概率论与数理统计',

    5. MAX(IF(c.coursenm = '线性代数', s.scores, 0)) AS '线性代数',

    6. MAX(IF(c.coursenm = '高等数学(一)', s.scores, 0)) AS '高等数学(一)',

    7. MAX(IF(c.coursenm = '高等数学(二)', s.scores, 0)) AS '高等数学(二)'

    对,没错,就是我们上面进行行转列查询要用的语句,那样就不用知道多少课程和这些课程的名字,只要这样几行代码便可以得到动态的列了。

    group_concat(),手册上说明:该函数返回带有来自一个组的连接的非NULL值的字符串结果。
    通俗点理解,其实是这样的:group_concat()会计算哪些行属于同一组,将属于同一组的列显示出来。要返回哪些列,由函数参数(就是字段名)决定。分组必须有个标准,就是根据group by指定的列进行分组。

    concat() 操作的参数是数组,那么添加的是数组中的元素,而不是数组。该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本

    动态的列是拿到了,那如何再结合SQL语句进行查询得到结果呢?
    这里要说明一点,因为用到了拼接函数,如果像上面的查询语句,只是把那几行语句替换掉,也就是下面这样

     
    1. Select st.stuid, st.stunm,

    2. (

    3. SELECT

    4. GROUP_CONCAT(DISTINCT

    5. CONCAT(

    6. 'MAX(IF(c.coursenm = ''',

    7. c.coursenm,

    8. ''', s.scores, NULL)) AS ',

    9. c.coursenm

    10. )

    11. )

    12. FROM courses c

    13. )

    14. From Student st

    15. Left Join score s On st.stuid = s.stuid

    16. Left Join courses c On c.courseno = s.courseno

    17. Group by st.stuid;

    然而得到的结果却是这样的

    这里我就不多做赘述了,想必大家也明白。那么既然这样不行,那该怎么做呢?

    没错,这里就要像普通的那些语句那样,进行声明,将语句拼接完整之后,再执行,也就是下面这样

     
    1. SET @sql = NULL;

    2. SELECT

    3. GROUP_CONCAT(DISTINCT

    4. CONCAT(

    5. 'MAX(IF(c.coursenm = ''',

    6. c.coursenm,

    7. ''', s.scores, 0)) AS ''',

    8. c.coursenm, ''''

    9. )

    10. ) INTO @sql

    11. FROM courses c;

    12.  
    13. SET @sql = CONCAT('Select st.stuid, st.stunm, ', @sql,

    14. ' From Student st

    15. Left Join score s On st.stuid = s.stuid

    16. Left Join courses c On c.courseno = s.courseno

    17. Group by st.stuid');

    18. PREPARE stmt FROM @sql;

    19. EXECUTE stmt;

    20. DEALLOCATE PREPARE stmt;

    直接执行这些语句,得到如下结果。

    MySQL prepare语法: 
    PREPARE statement_name FROM preparable_SQL_statement; /*定义*/ 
    EXECUTE statement_name [USING @var_name [, @var_name] ...]; /*执行预处理语句*/ 
    {DEALLOCATE | DROP} PREPARE statement_name /*删除定义*/ ; 

    详解见:http://www.cnblogs.com/gklsy/archive/2012/01/10/2317934.html

    当然这个语句拼接中的查询可以加入条件查询,比如我们要查询学号是1003的成绩
    也就是下面这样

    语句则如下

     
    1. SET @sql = NULL;

    2. SET @stuid = '1003';

    3. SELECT

    4. GROUP_CONCAT(DISTINCT

    5. CONCAT(

    6. 'MAX(IF(c.coursenm = ''',

    7. c.coursenm,

    8. ''', s.scores, 0)) AS ''',

    9. c.coursenm, ''''

    10. )

    11. ) INTO @sql

    12. FROM courses c;

    13.  
    14. SET @sql = CONCAT('Select st.stuid, st.stunm, ', @sql,

    15. ' From Student st

    16. Left Join score s On st.stuid = s.stuid

    17. Left Join courses c On c.courseno = s.courseno

    18. Where st.stuid = ''', @stuid, '''

    19. Group by st.stuid');

    20. PREPARE stmt FROM @sql;

    21. EXECUTE stmt;

    22. DEALLOCATE PREPARE stmt;

    对比前面的语句,我们可以看到在第二行的Left join后面我改了一些,还有就是前面的变量加了一个@stuid [ 注:这里的 @ 符号是在SQL语句定义变量习惯用法,我个人理解应该是用来区分吧!]

    那么问题来了,行转列的查询已经实现了,怎么标题中还写着存储过程?对,没错,就是存储过程!

    储存过程:http://blog.sina.com.cn/s/blog_52d20fbf0100ofd5.html      http://www.cnblogs.com/exmyth/p/3303470.html

    像上面的语句,我们如果直接在MySQL中操作是没问题的,但如果用到项目中,那么这个语句显然我们没法用,而且我这次做的项目是结合使用MyBatis,大家都知道在MyBatis中的XML文件中可以自己写SQL语句,但是这样的很显然我们没法放到XML文件中。

    而且最关键的是,这里不能用 If 条件,好比我们要判断学号是否为空或者等于0再加上条件进行查询,可是这里不支持。
    没错就是下面这样

     
    1. SET @sql = NULL;

    2. SET @stuid = '1003';

    3. SET @courseno = 'C002';

    4.  
    5. SELECT

    6. GROUP_CONCAT(DISTINCT

    7. CONCAT(

    8. 'MAX(IF(c.coursenm = ''',

    9. c.coursenm,

    10. ''', s.scores, 0)) AS ''',

    11. c.coursenm, ''''

    12. )

    13. ) INTO @sql

    14. FROM courses c;

    15.  
    16. SET @sql = CONCAT('Select st.stuid, st.stunm, ', @sql,

    17. ' From Student st

    18. Left Join score s On st.stuid = s.stuid

    19. Left Join courses c On c.courseno = s.courseno');

    20.  
    21. IF @stuid is not null and @stuid != 0 then

    22. SET @sql = CONCAT(@sql, ' Where st.stuid = ''', @stuid, '''');

    23. END IF;

    24.  
    25. SET @sql = CONCAT(@sql, ' Group by st.stuid');

    26.  
    27. PREPARE stmt FROM @sql;

    28. EXECUTE stmt;

    29. DEALLOCATE PREPARE stmt;

    对,我就是加上 if 之后人家就是不支持,就是这么任性。

    所以就要用到存储过程啦,而且用存储过程的好处是,方便我们调用,相当于一个函数,其他可能也是类似的查询不需再重复写代码,直接调存储过程就好,还能随心所欲的加上if条件判断,多么美好的事情,哈哈~。

    那么说到存储过程,这里该如何写呢?
    创建存储过程的语句我就不多写了,这里呢把上面的查询语句直接放到创建存储过程的begin和end直接就可以了,如下:

     
    1. DELIMITER &&

    2. drop procedure if exists SP_QueryData;

    3. Create Procedure SP_QueryData(IN stuid varchar(16))

    4. READS SQL DATA

    5. BEGIN

    6.  
    7. SET @sql = NULL;

    8. SET @stuid = NULL;

    9. SELECT

    10. GROUP_CONCAT(DISTINCT

    11. CONCAT(

    12. 'MAX(IF(c.coursenm = ''',

    13. c.coursenm,

    14. ''', s.scores, 0)) AS ''',

    15. c.coursenm, '\''

    16. )

    17. ) INTO @sql

    18. FROM courses c;

    19.  
    20. SET @sql = CONCAT('Select st.stuid, st.stunm, ', @sql,

    21. ' From Student st

    22. Left Join score s On st.stuid = s.stuid

    23. Left Join courses c On c.courseno = s.courseno');

    24.  
    25. IF stuid is not null and stuid <> '' then

    26. SET @stuid = stuid;

    27. SET @sql = CONCAT(@sql, ' Where st.stuid = \'', @stuid, '\'');

    28. END IF;

    29.  
    30. SET @sql = CONCAT(@sql, ' Group by st.stuid');

    31.  
    32. PREPARE stmt FROM @sql;

    33. EXECUTE stmt;

    34. DEALLOCATE PREPARE stmt;

    35.  
    36. END &&

    37.  
    38. DELIMITER ;

    嗯,对比上面简单的SQL语句可以看出,这里使用了 if 语句,对学号进行了判断

    不过这里要注意一点,这里的if语句不像我们平时Java啊那种写法也就是下面

     
    1. if(条件)

    2. {

    3. 要执行的语句块

    4. }

    对,在SQL里面的if语句不一样,不需要括号啊什么的,就像直接说英文一样

     
    1. IF @stuid is not null and @stuid != 0 then

    2. SET @sql = CONCAT(@sql, ' Where st.stuid = ''', @stuid, '''');

    3. END IF;

    嗯,就是这么简单明了,如果条件满足,那么就怎么样,然后结束。

    然后我们就可以传参数调用这个SP了

    CALL `SP_QueryData`('1001');

    得到如下结果

    当然我们也可以直接传个空串过去

    CALL `SP_QueryData`('');

    同样得到我们想要的结果

    好了,以上就是这次我在mysql进行动态行转列的实现过程。

    总结及问题

    开始的时候,只想到要行转列,写着写着突然发现要动态的,因为我不确定到底有多少列。
    在网上各种找资料,然而看不太懂!

    后来,参考了Pivot table with dynamic columns in MySQL这个,才写出来的。

    然后是各种问题,先是SQL语句中加入if条件,我像平时写java那样,发现并没有什么用,网上也说就是这种

     
    1. IF(stuid is not null && stuid <> '') then

    2. SET @stuid = stuid;

    3. SET @sql = CONCAT(@sql, ' Where st.stuid = \'', @stuid, '\'');

    4. END IF;

    可是我这么写了之后并没有什么用,还是报错,找了不少之后才发现原来不是这么写的,然后改了过来。

    改完之后我以为可以了,可是,发现依旧不行。然后我就在想是不是这里不能用if判断,因为不是一个function或者procedure,于是我就写创建procedure的语句。

    改造完之后,procedure成功的创建了。那创建完我就试试能不能,调用procedure之后,当当当当,结果出来了。

    嗯,这个过程还是收获很多的,对MySQL的行转列,以及存储过程,还有在SQL语句中的使用不一样的地方等。
    而且,这个行转列的实现了之后,这个项目基本上没啥大问题了对数据的处理,相当好啊,哈哈~

    以上就是我在行转列实现的过程中所有的内容,相对来说,我觉得,这里写的很清楚很明了了,所以只要你有耐心看完并认真研究的话,这个内容对你的行转列还是有很大裨益的

    展开全文
  • 前段时间做调查问卷,客户创建自定义问卷内容,包括题目选项内容;之后需要导出问卷明细,,,,麻烦来咯于是到网上到处搜索,没有直接结果;于是又找各种相似的,,终于功夫不负有心人然后最终自己写出来了,decode才是核心...

    前段时间做调查问卷,客户创建自定义问卷内容,包括题目和选项内容;

    之后需要导出问卷明细,,,,麻烦来咯

    于是到网上到处搜索,没有直接结果;于是又找各种相似的,,终于功夫不负有心人

    然后最终自己写出来了,decode才是核心

    废话不多说,看图

    需求示例图表:

    c32a741eb3c56c8f2baed2f3f20fdb61.png

    存储过程,嘿嘿:

    create or replace procedure NAG_QUESTIONERSULT_EXP(

    V_QID in number,

    C_Title out sys_refcursor,

    C_Data out sys_refcursor

    )

    as

    /*

    导出调查问卷资答案数据

    Auth:lzpong 2015/09/01

    */

    cursor dusers is --列信息

    select qss.qss_id,nvl(qss.qss_title,substr(qs.qs_title,0,20)) QSS_TITLE from nag_questions qs,nag_questionss qss

    where qss.qss_qs_id=qs.qs_id and qs.qs_q_id=V_QID

    order by qs.qs_order,qss.qss_order;

    strSql varchar2(10000);

    begin

    for ur in dusers loop

    strSql:=strSql||'wm_concat(decode(QR_QSS_ID,'''||ur.qss_id||''',QR_QSS_DES,null)) as "'||ur.qss_title||'",';

    end loop;

    open C_Data for

    'select QR_ID,QR_AGENTID,max(QR_CREATEDATE) QR_CREATEDATE,'||

    substr(strSql,0,length(strSql)-1)

    ||'from (

    select QR_QS_ID,QR_QSS_ID QR_QSS_ID,''(√)''||QR_QSS_DES QR_QSS_DES, QR_CREATEDATE,QR_U_ID,QR_AGENTID,QR_ID

    from nag_questionresult,nag_questions where qr_qs_id=qs_id and qs_q_id='||V_QID||'

    order by QR_ID

    )

    group by QR_ID,QR_AGENTID';

    open C_Title for

    select q.q_id,q.q_title,q.q_des,qs.qs_id,qs.qs_title ,(select count(qss_id) from nag_questionss qss where qss.qss_qs_id=qs.qs_id) qs_cols

    from nag_question q,nag_questions qs where q.q_id=qs.qs_q_id and q.q_id=V_QID

    order by q.q_id,qs.qs_order;

    end;

    存储过程

    实际数据:

    85e071e81fe66ab8f79b068478b5498c.png 

    a6fc8305bf0d91ea9c1c8a5b235314fc.png

    结果:

    bad6ab9a18f34d42d3110bb463127bf0.png

    转载请注明来自:lzpong

    Oracle 多行转多列

    Oracle 多行转多列,列值转为列名   前段时间做调查问卷,客户创建自定义问卷内容,包括题目和选项内容; 之后需要到处问卷明细,,,,麻烦来咯 于是到网上到处搜索,没有直接结果;于是又找各种相似的 ...

    Oracle字符串行拆分成列的三种方式

    Oracle字符串行拆分成列的三种方式 --muphy 开发过程中经常会遇到将前台多个值用逗号连接一同传递到后台查询,这个用逗号连接的字符串分隔的每个字符串分别对应Oracle数据库表的不同行. 如下 ...

    Oracle行转列&sol;列转行

    1.oracle的pivot函数 原表 使用pivot函数: with temp as(select '四川省' nation ,'成都市' city,'第一' ranking from dual u ...

    oracle 行转列~列转行(几种方法)

    工作中,我们经常会碰到行转列的情况 这里我介绍几种简单的方法--行转列 1.oracle的pivot函数 原表 使用pivot函数: with temp as(select '四川省' nation ...

    poi获取合并单元格内的第一行第一列的值

    当读取如图所示的excel时,显示为第1行 第1列 的内容是:合并单元格 其它在合并单元格区域内的单元格不显示 示例代码如下: import java.io.FileInputStream; impo ...

    Oracle中&OpenCurlyDoubleQuote;行转列”的实现方式

    在报表的开发当中,难免会遇到行转列的问题. 以Oracle中scott的emp为例,统计各职位的人员在各部门的人数分布情况,就可以用“行转列”: scott的emp的原始数据为: EMPNO ENAM ...

    awk替换第几行第几列的值

    代码如下: awk '{if(2==NR){gsub(/.*/, 300, $5)}print}' list.txt 将文件list.txt的第2行第5列的值替换为300

    学习笔记13—python DataFrame获取行数、列数、索引及第几行第几列的值

    1. df=DataFrame([{‘A’:’11’,’B’:’12’},{‘A’:’111’,’B’:’121’},{‘A’:’1111’,’B’:’1211’}]) print df.column ...

    python DataFrame获取行数、列数、索引及第几行第几列的值

    print df.columns.size#列数 2 print df.iloc[:,0].size#行数 3 print df.ix[[0]].index.values[0]#索引值 0 print ...

    随机推荐

    SeleniumIDE从0到1 (Selenium IDE 回放)

    录制完脚本后可以对录制的脚本进行回放操作. 简介一: 调回放进度(快/慢),点击按钮即可自动进行回放操作.

    使用Visual Studio Code搭建TypeScript开发环境

    使用Visual Studio Code搭建TypeScript开发环境 1.TypeScript是干什么的 ? TypeScript是由微软Anders Hejlsberg(安德斯·海尔斯伯格,也是 ...

    Cyborg Genes

    题意: 给两个字符串,求最短的以两字符串为子序列的字符串和个数 分析: 最长公共子序列的变形,num[i][j]表示个数 #include #include

    Kickstart &plus; http Linux自动化部署服务端

    设备需要开启Network Boot功能.具体PXE技术就另外提,本文主要讲解配置. 在搭建该服务器之前需要关闭SELinux和iptables不然可能dhcp服务都起不来,客户端收不到IP地址,无法 ...

    bootbox的使用

    /* * className为green的方法 */ function alertMsgG(msg,title,fn){ bootbox.alert({ buttons: { ok: { label: ...

    js显示表单的提交验证

    ...

    基于ABP模块组件与依赖注入组件的项目插件开发

    注意,阅读本文,需要先阅读以下两篇文章,并且对依赖注入有一定的基础. 模块系统:http://www.cnblogs.com/mienreal/p/4537522.html 依赖注入:http://w ...

    Linux 安装搭建 tftpd 服务器

    ---------- For Ubantu 18.0.4 ---------- 0.安装tftp-server sudo apt-get install tftpd-hpa (服务器端) sudo a ...

    图论---POJ 3660 floyd 算法&lpar;模板题&rpar;

    是一道floyd变形的题目.题目让确定有几个人的位置是确定的,如果一个点有x个点能到达此点,从该点出发能到达y个点,若x+y=n-1,则该点的位置是确定的.用floyd算发出每两个点之间的距离,最后统 ...

    展开全文
  • 一、获取列名的2种方式 1、链表式 [column for column in df] [a,b] 2、直接使用 list print(list(df)) [‘a‘, ‘b‘] 二、删除DataFrame某一行/、多行内容——drop 1、删除 A B C D 0 0 1 2 3 ...

    一、获取列名的2种方式

    1、链表式

    [column for column in df]
    [a,b]

    2、直接使用 list 

    print(list(df))
    [‘a‘, ‘b‘]

    二、删除DataFrame某一行/列、多行内容——drop

    1、删除列

    
       A   B   C   D
     
    0  0   1   2   3
     
    1  4   5   6   7
     
    2  8   9  10  11
     
    #Drop columns,两种方法等价
     
    >>>df.drop(['B', 'C'], axis=1)
     
       A   D
     
    0  0   3
     
    1  4   7
     
    2  8  11
    
    #删除空列名
    df.drop('Unname: 0')
    
    
    # 第一种方法下删除column一定要指定axis=1,否则会报错
    >>> df.drop(['B', 'C'])
     
    ValueError: labels ['B' 'C'] not contained in axis
    
    >>>df.drop(columns=['B', 'C'])
     
       A   D
     
    0  0   3
     
    1  4   7
     
    2  8  11
    

    2、删除行

    #Drop rows
    >>>df.drop([0, 1])
     
       A  B   C   D
     
    2  8  9  10  11
     
    >>> df.drop(index=[0, 1])
     
       A  B   C   D
        
    2  8  9  10  11

    3、删除指定行

    >>> import pandas as pd
    >>> df = {'DataBase':['mysql','test','test','test','test'],'table':['user','student','course','sc','book']}
    >>> df = pd.DataFrame(df)
    >>> df
      DataBase    table
    0    mysql     user
    1     test  student
    2     test   course
    3     test       sc
    4     test     book
     
    #删除table值为sc的那一行
    >>> df.drop(index=(df.loc[(df['table']=='sc')].index))
                  
      DataBase    table
    0    mysql     user
    1     test  student
    2     test   course
    4     test     book

    三、修改DataFrame的索引

    注意:修改索引后,其值全部变为Nan。

    df.set_index(["Column"], inplace=True)
    

     

    展开全文
  • 有的时候从data里面锁定了一个值,想看这个值属于哪一。 比如kaggle上有一个数据:ign游戏评分。 index为各种平台,columns为各种游戏类型。 我们想查看‘PlayStation Vita’那种类型评分最低,代码如下: worst_...
  • 在做数据挖掘的时候,想改一个DataFrame的column名称,所以就查了一下,总结如下: 数据如下: >>>import pandas as pd >>>a = pd.DataFrame({'A':[1,2,3], 'B':[4,5,6], 'C':[7,8,9]}) >>> a ...
  • 网上搜索很多没有想要的答案,摸索了一下能够满足自己的要求,写出...我一开始传入的是Dataframe类变量,这个Dataframe类变量是使用过Dataframe[['列名']]取得,然后就报iloc giving 'IndexError: single positional...
  • pandas 处理把一的数据转换成列名

    千次阅读 2020-12-29 11:17:00
    今天又碰到一个表格处理的问题,特写篇文章记录一下处理过程。 原始表格如下图: 想变成目标格式如下: 下面是代码 import pandas as pd csv = pd.read_excel(r'C:\Users\likai\Desktop\价格.xlsx') ...
  • 今天想做一个简单的回归分析,原始数据如下: ...原来只要是用Sklearn做回归,Y就必须要有列名。但是我看了一些我的Y,确实没有列名,发现应该这么修改: X,Y=data.ix[:,6:7],data.ix[:,8:9] ...
  • Oracle中把值转换为列名

    千次阅读 2018-12-05 19:03:30
    create table ass(acptnum varchar(30),qu_name varchar(4000),awname varchar(2000)); insert into ass values('15101232097','问题1','答案1'); insert into ass values('...运行结果,将问题的值转换为列名了。
  • 一、代码二、结果 ... * @param $count 的数量 * @return array 列名一维数组 */ public static function getCol($count) { $columnFlag = [ 0 => 'Z', 1 => 'A', 2 => 'B', 3 => 'C', .
  • 现需创建新表,将某一行数据中的stuname字段值作为表名,该行数据中的valueb,valuec,valued值作为新表名的列名,并作为值插入表中。 新表的字段有:valueid,valueb对应的值,valueb对应的值,valueb对应的值;...
  • ----------------------- 0 Europe/London en 45 x 1 Europe/Paris fr 46 我浏览了关于将数据透视表功能嵌入到MySQL中的各种各样的答案,并且类似的,但是似乎没有一个使用来自同一个表的的唯一行值的变量列名别名...
  • 30_Pandas.DataFrame提取(选择)指定行名和列名的行和列 从pandas.DataFrame中提取(选择)行名称(索引名称)和列名称(名称)满足特定条件的行或。 了解如何提取元素包含特定字符串而不是行名/列名的行,参阅...
  • 一个衬垫不存在:In [27]: df=df.rename(columns = {'two':'new_name'})In [28]: dfOut[28]:one three new_name0 1 a 91 2 b 82 3 c 73 4 d 64 5 e ...
  • 如果想在一个已经建好的表中添加一,可以用以下代码: alter table 表名 add column 列名 varchar(20) not null; 这条语句会向已有的表中加入一,这一在表的最后一位置。如果我们希望添加在指定的一,...
  • 在 享受Python学习之旅-上面的代码片段都符合PEP8,这在Python land中通常有助于了解PEP8Python模式/习惯用法,并从帮助其他人直接跳入问题区域的统一代码读取中获益。在 注:在race_图中插入预先测试距离的存在...
  • 关于数据库优化1——关于count(1),count(),count(列名)的区别,关于表中字段顺序的问题 1.关于count(1),count(),count(列名)的区别  相信大家总是在工作中,或者是学习中对于count()的到底怎么用更快。...
  • 具体分析如下:我们生成excel都会使用phpExcel类,这里就来给大家介绍在生成excel列名超过26大于Z时的解决办法,这是phpExcel类中的方法,今天查到了,记录一下备忘,代码如下:代码如下:public static function ...
  • 1 设置路径 2 读取数据 3 查看数据的类型 4给每列都命名 5添加列名成功
  • 怎么修改mysql的表名和列名

    千次阅读 2021-03-15 21:13:27
    怎么修改mysql的表名和列名在mysql中,可以通过“ALTER TABLE 旧表名 RENAME 新表名;”语句来修改表名,通过“ALTER TABLE 表名 CHANGE 旧字段名/列名 新字段名/列名 新数据类型;”语句来修改列名。修改mysql的表名...
  • mysql选择动态行值作为列名,另一作为值我有一个用户信息的遗留表(仍在使用中),我无法改变结构 -id name value------------------------------0 timezone Europe/London0 language en0 country 450 something x1 ...
  • 有没有办法在没有事先知道任何此类信息的情况下检索字段名称值?所以这个函数可以任何mysql查询结果一起使用。功能function mysqlToArray($result){$arr = array();$numRows = mysql_num_rows($r...
  • 解决表的列名和对象的属性名不匹配
  • SQL Server修改列名和列类型

    万次阅读 2018-11-27 15:39:20
    一.修改列名 EXEC sp_rename '表名.[字段旧名]', '字段新名' , 'COLUMN'; 二.修改类型 alter table 表名 alter column 字段名 decimal(18, 2) null;  
  • 01_Pandas.DataFrame的行名和列名的修改

    千次阅读 2020-12-24 03:25:33
    01_Pandas.DataFrame的行名和列名的修改pandas.DataFrame行名(index)和列名(columns)的修改方法如下。rename()任意的行名(index)和列名(columns)的修改add_prefix(), add_suffix()列名的接头词结尾词的追加index...
  • public static string ConvertColumnIndexToColumnName(int index) { index = index + 1; int system = 26; char[] digArray = new char[100]; ...
  • dataframe 修改列名

    千次阅读 2021-12-29 10:19:50
    1,利用columns=[]全部重命名,新列名与旧列名长度需一致 col=['new1','new2',....'newn'] df.columns=col 2,利用columns={}对部分列名进行重命名 df.rename(columns={'oldname1':'newname1','oldname2':'newname2...
  • 我们经常想获取一个数据库中的所有表名和列名,在MS SQL中,比较方便,直接查询sysobjects表即可获取。但是在Access中,如何获取呢?昨天正好有个程序要用到Access中的表,来判断是否存在,如果不存在,则创建。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,436
精华内容 2,574
关键字:

列明和列名