python行转列函数 python列表行列转化

Python变形1.长宽表的变形
什么是长表?什么是宽表?这个概念是对于某一个特征而言的 。例如:一个表中把性别存储在某一个列中,那么它就是关于性别的长表;如果把性别作为列名,列中的元素是某一其他的相关特征数值,那么这个表是 关于性别的宽表 。
1.1 pivot
pivot 是一种典型的长表变宽表的函数 。对于一个基本的长变宽的操作而言,最重要的有三个要素,分别是变形后的行索引、需要转到列索引的列, 以及这些列和行索引对应的数值,它们分别对应python行转列函数了 pivot 方法中的 index, columns, values 参数 。新生成表的 列索引是 columns 对应列的 unique 值,而新表的行索引是 index 对应列的 unique 值,而 values 对应python行转列函数了想 要展示的数值列 。
利用 pivot 进行变形操作需要满足唯一性的要求,即由于在新表中的行列索引对应python行转列函数了唯一的 value,因此原 表中的 index 和 columns 对应两个列的行组合必须唯一 。例如 , 现在把原表中第二行张三的数学改为语文就 会报错,这是由于 Name 与 Subject 的组合中两次出现 (”San Zhang”, ”Chinese”) ,从而最后不能够确定到 底变形后应该是填写 80 分还是 75 分 。
pandas 从 1.1.0 开始,pivot 相关的三个参数允许被设置为列表,这也意味着会返回多级索引 。这里构造一 个相应的例子来说明如何使用:下表中六列分别为班级、姓名、测试类型(期中考试和期末考试)、科目、成 绩、排名 。
根据唯一性原则,新表的行索引等价于对 index 中的多列使用 drop_duplicates ,而列索引的长度为 values 中的元素个数乘以 columns 的唯一组合数量(与 index 类似) 。
1.2 pivot_table
pivot 的使用依赖于唯一性条件,那如果不满足唯一性条件,那么必须通过聚合操作使得相同行列组合对应 的多个值变为一个值 。例如,张三和李四都参加了两次语文考试和数学考试,按照学院规定,最后的成绩是 两次考试分数的平均值,此时就无法通过 pivot 函数来完成 。
1.3 melt
长宽表只是数据呈现方式的差异,但其包含的信息量是等价的,前面提到了利用 pivot 把长表转为宽表 , 那 么就可以通过相应的逆操作把宽表转为长表 , melt 函数就起到了这样的作用 。
1.4 wide_to_long
melt 方法中,在列索引中被压缩的一组值对应的列元素只能代表同一层次的含义,即 values_name。现在 如果列中包含了交叉类别,比如期中期末的类别和语文数学的类别,那么想要把 values_name 对应的 Grade 扩充为两列分别对应语文分数和数学分数,只把期中期末的信息压缩,这种需求下就要使用 wide_to_long 函数来完成 。
2 索引的变形
2.1 stack 与 unstack
unstack 函数的作用是把行索引转为列索引
unstack 的主要参数是移动的层号,默认转化最内层,移动到列索引的最内层,同时支持同时转化多个层
类似于 pivot 中的唯一性要求,在 unstack 中必须保证 被转为列索引的行索引层和 被保留的行索引层构成 的组合是唯一的,例如把前两个列索引改成相同的破坏唯一性,那么就会报错
与 unstack 相反,stack 的作用就是把列索引的层压入行索引,其用法完全类似 。
2.2 聚合与变形的关系
在上面介绍的所有函数中,除了带有聚合效果的 pivot_table 以外,所有的函数在变形前后并不会带来 values 个数的改变,只是这些值在呈现的形式上发生了变化 。在上一章讨论的分组聚合操作,由于生成了新的行列 索引,因此必然也属于某种特殊的变形操作 , 但由于聚合之后把原来的多个值变为了一个值,因此 values 的 个数产生了变化 , 这也是分组聚合与变形函数的最大区别 。
3 其他变形函数
3.1 crosstab
crosstab 并不是一个值得推荐使用的函数,因为它能实现的所有功能 pivot_table 都能完成,并且速度更快 。在默认状态下,crosstab 可以统计元素组合出现的频数,即 count 操作 。例如统计 learn_pandas 数据集中 学校和转系情况对应的频数
3.2 explode
explode 参数能够对某一列的元素进行纵向的展开 , 被展开的单元格必须存储 list, tuple, Series, np.ndarray 中的一种类型 。
3.3 get_dummies
get_dummies 是用于特征构建的重要函数之一 , 其作用是把类别特征转为指示变量 。例如,对年级一列转为 指示变量,属于某一个年级的对应列标记为 1,否则为 0
python中行列转换时,行标签没有定义微信群又双行挛侍饬? ,如图所示,两个表格的转换 。?
首先跟大家分享一下我的记忆口诀:行转列逆透视
列转行透视
我们用Excel、Python、SQL分别实现一下上图的要求 。
Excel
使用到Excel中的Power Query,只有Excel2016以上的版本才有,注意版本号 。
行转列
全选数据数据选项卡自表格/区域?
由于要转换的列是由"/"分割的,所以我们需要先拆分列 。选中需要拆分的列右键拆分列按分隔符 。?
选择自定义输入"/"选择每次出现分隔符时确定?
选中标题行右键逆透视其他列 也可以多选中值列选择逆透视?
删除多于列关闭并上载,完成 。?
列转行
这边暂且只想到添加辅助列来实现该效果,有更好的方法欢迎在评论区留言 。
同样多选进入Power Query界面 , 添加列自定义列输入"=[值]"确定相当于是复制一列值 , 列名自定义 , 自定义公式内的值根据原表列名来 。?
选中“值”透视列“值列”选择自定义聚合值函数选择不要聚合确定第一步也可以选择“自定义”列,如果这样操作的话,在第三步就要选择"值",这里列名没有起好,请大家看清楚 。?
选中透视出来的列右键合并列自定义分隔符确定?
选中合并后的列右键替换值要查找的列输入"//"确定关闭并上载?
完成。?
Python
行转列
import pandas as pd
df = pd.DataFrame([['流浪地球', '科幻/冒险/灾难'], ['唐山大地震', '剧情/亲情/灾难']],
columns=['name', 'type'])
df?
# 根据'/'拆分为列表
df['type'] = df.type.str.split("/")
df_new = df.explode('type')
df_new?
列转行
df_new.groupby(by='name', as_index=False).agg("/".join)?explode()函数在pandas0.25.0之后才支持,除了这个方法俺想不到别的方法了 。
SQL
行转列
-- 建表,插入数据DROP TABLE IF EXISTS temp;
CREATE TABLE temp ( name varchar(10), type varchar(20) );
INSERT INTO temp VALUES ('流浪地球', '科幻/冒险/灾难'), ('唐山大地震', '剧情/亲情/灾难');
select * from temp;?
SELECT a.name
, substring_index(substring_index(a.type, '/', b.help_topic_id1), '/', -1) AS type
FROM temp a
JOIN mysql.help_topic b ON b.help_topic_idlength(a.type) - length(replace(a.type, '/', ''))1?
列转行
用刚刚查询出来的结果我们再创建一个temp2 。
DROP TABLE IF EXISTS temp2;
CREATE TABLE temp2
(SELECT a.name , substring_index(substring_index(a.type, '/', b.help_topic_id1), '/', -1) AS type FROM temp a JOIN mysql.help_topic b ON b.help_topic_idlength(a.type) - length(replace(a.type, '/', ''))1);
-- 使用group_concat函数实现列转行拼接SELECT name, GROUP_CONCAT(type SEPARATOR '/') AS type
FROM temp2
如何用python实现行列互换?题主既然问出行列转换这样的问题python行转列函数,那就说明题主的Python功力远远不到家的 。行列互换其实在Python中很快捷的就可以实现python行转列函数了 。
首先,让我们来建立一个矩阵,这里我们使用numpy包下的random包来生成3×3的矩阵 。大概的代码如下所示:
import numpy as np
a=np.random.random((3,3))
这样,我们就可以生成一个随机数组成的3×3矩阵 。之后我们就可以将这个矩阵进行行列互换了 。具体代码也非常的简单,具体如下所示:
b=a.T
如上所示,只需要对a对象进行T操作 , 就可将我们的数据进行行列转换了 。
所以,题主在学习的时候,一定要学会用简单的方法去解决复杂的问题 。而不要将自己的问题复杂化,就如同楼上某位同学写的代码那样,明显太复杂了 。本来三行代码能够实现的功能 , 搞得如此纠结 。
另外,如果题主想进入数据分析行业,我推荐一本Python的相关书籍给你,这本书可以让你掌握一些常见的数据整理、数据清洗操作 。这本书的名字是《利用Python进行数据分析》,该书作者是高效数据分析包Pandas的开发者,对数据分析基本技能的提升作用显著 。
如果有什么想与我交流的,欢迎在本题下进行评论 。
python行转换成列怎么实现?可以使用Python字符串内置的替换方法把分隔符“,”替换成‘\r\n’ 换行符即可(Linux、MacOS下换行符为:"\n"):
Python代码实现
iPython下演示
Python如何将多行数据合并成一行1、新建一个将两个列表组合成一个列表 。
2、中文编码声明注释:#coding=gbk 。
3、定义度两个列知表,分别道是s1和s2 , 并且赋值 。
4、使用回 号将两个列表组合成一个 。
5、使用print()函数输出s3 。
6、运行脚本,输出新组合出答来的列表 。
注意事项:
Python@用做函数的修饰符,可以在模块或者类的定义层内对函数进行修饰,出现在函数定义的前一行回,不允许和函数定义在同一行 。
一个修饰符就是一个函数,它将被修饰的函数作为参数,并返回修饰后的同名函数或其他可调用的东西 。
在Python的函数中偶尔会看到函数定义的上一行有@functionName的修饰,当解释器读到@这样的修饰符的答时候会优先解除@后的内容,直接就把@的下一行的函数或者类作为@后边函数的参数,然后将返回值赋给下一个修饰的函数对象 。
python中怎样让数据列转置需求:
你需要转置一个二维数组,将行列互换.
讨论:
你需要确保该数组的行列数都是相同的.比如:
arr = [[1, 2, 3], [4, 5, 6], [7,8, 9], [10, 11, 12]]
列表递推式提供了一个简便的矩阵转置的方法:
print [[r[col] for r in arr] for col in range(len(arr[0]))]
[[1, 4, 7, 10], [2, 5, 8, 11],[3, 6, 9, 12]]
另一个更快和高级一些的方法,可以使用zip函数:
print map(list,
zip(*arr))
本节提供了关于矩阵转置的两个方法,一个比较清晰简单,另一个比较快速但有些隐晦.
有时候,数据到来的时候使用错误的方式,比如,你使用微软的ADO接口访问数据库,由于Python和MS在语言实现上的差别.
Getrows方法在Python中可能返回的是列值,和方法的名称不同.本节给的出的方法就是这个问题常见的解决方案,一个更清晰,一个更快速.
在列表递推式版本中,内层递推式表示选则什么(行),外层递推式表示选择者(列).这个过程完成后就实现了转置.
在zip版本中,我们使用*arr语法将一维数组传递给zip做为参数,接着,zip返回一个元组做为结果.然后我们对每一个元组使用list方法,产生了列表的列表(即矩阵).因为我们没有直接将zip的结果表示为list,
所以我们可以我们可以使用itertools.izip来稍微的提高效率(因为izip并没有将数据在内存中组织为列表).
import itertools
print map(list,
itertools.izip(*arr))
但是,在特定的情况下,上面的方法对效率的微弱提升不能弥补对复杂度的增加.
关于*args和**kwds语法:
*args(实际上,*号后面跟着变量名)语法在Python中表示传递任意的位置变量,当你使用这个语法的时候(比如,你在定义函数时使用),Python将这个变量和一个元组绑定,并保留所有的位置信息,
而不是具体的变量.当你使用这个方法传递参数时,变量可以是任意的可迭代对象(其实可以是任何表达式,只要返回值是迭代器).
**kwds语法在Python中用于接收命名参数.当你用这个方式传递参数时,Python将变量和一个dict绑定,保留所有命名参数,而不是具体的变量值.当你传递参数时,变量必须是dict类型(或者是返回值为dict类型的表达式).
如果你要转置很大的数组,使用Numeric Python或其它第三方包,它们定义了很多方法,足够让你头晕的.
相关说明:
zip(...)
zip(seq1 [,
seq2 [...]]) - [(seq1[0], seq2[0] ...),
(...)]
Return a
list of tuples, where each tuple contains the i-th element
from each of
the argument sequences. The returned list is truncated
in length to
the length of the shortest argument sequence.
【python行转列函数 python列表行列转化】关于python行转列函数和python列表行列转化的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读