Python Pandas list列表数据列拆分成多行的方法实现


Posted in Python onDecember 14, 2020

1、实现的效果

示例代码:

df=pd.DataFrame({'A':[1,2],'B':[[1,2],[1,2]]})
df
Out[458]: 
  A    B
0 1 [1, 2]
1 2 [1, 2]

拆分成多行的效果:

   A  B
0  1  1
1  1  2
3  2  1
4  2  2

2、拆分成多行的方法

1)通过apply和pd.Series实现

容易理解,但在性能方面不推荐。

df.set_index('A').B.apply(pd.Series).stack().reset_index(level=0).rename(columns={0:'B'})
Out[463]: 
  A B
0 1 1
1 1 2
0 2 1
1 2 2

2)使用repeat和DataFrame构造函数

性能可以,但不太适合多列

df=pd.DataFrame({'A':df.A.repeat(df.B.str.len()),'B':np.concatenate(df.B.values)})
df
Out[465]: 
  A B
0 1 1
0 1 2
1 2 1
1 2 2

或者

s=pd.DataFrame({'B':np.concatenate(df.B.values)},index=df.index.repeat(df.B.str.len()))
s.join(df.drop('B',1),how='left')
Out[477]: 
  B A
0 1 1
0 2 1
1 1 2
1 2 2

3)创建新的列表

pd.DataFrame([[x] + [z] for x, y in df.values for z in y],columns=df.columns)
Out[488]: 
  A B
0 1 1
1 1 2
2 2 1
3 2 2

或者

#拆成多于两列的情况
s=pd.DataFrame([[x] + [z] for x, y in zip(df.index,df.B) for z in y])
s.merge(df,left_on=0,right_index=True)
Out[491]: 
  0 1 A    B
0 0 1 1 [1, 2]
1 0 2 1 [1, 2]
2 1 1 2 [1, 2]
3 1 2 2 [1, 2]

4)使用reindex和loc实现

df.reindex(df.index.repeat(df.B.str.len())).assign(B=np.concatenate(df.B.values))
Out[554]: 
  A B
0 1 1
0 1 2
1 2 1
1 2 2
#df.loc[df.index.repeat(df.B.str.len())].assign(B=np.concatenate(df.B.values)

5)使用numpy高性能实现

newvalues=np.dstack((np.repeat(df.A.values,list(map(len,df.B.values))),np.concatenate(df.B.values)))
pd.DataFrame(data=newvalues[0],columns=df.columns)
  A B
0 1 1
1 1 2
2 2 1
3 2 2

到此这篇关于Python Pandas list列表数据列拆分成多行的方法实现的文章就介绍到这了,更多相关Pandas list列拆分成多行内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python中使用语句导入模块或包的机制研究
Mar 30 Python
MySQL中表的复制以及大型数据表的备份教程
Nov 25 Python
Python3安装Scrapy的方法步骤
Nov 23 Python
Python最火、R极具潜力 2017机器学习调查报告
Dec 11 Python
Flask 让jsonify返回的json串支持中文显示的方法
Mar 26 Python
PyQt5每天必学之像素图控件QPixmap
Apr 19 Python
Python简单计算给定某一年的某一天是星期几示例
Jun 27 Python
django与小程序实现登录验证功能的示例代码
Feb 19 Python
Python如何批量获取文件夹的大小并保存
Mar 31 Python
详解python如何引用包package
Jun 07 Python
python接口自动化框架实战
Dec 23 Python
总结三种用 Python 作为小程序后端的方式
May 02 Python
pandas将list数据拆分成行或列的实现
Dec 13 #Python
pandas按照列的值排序(某一列或者多列)
Dec 13 #Python
详解pandas中利用DataFrame对象的.loc[]、.iloc[]方法抽取数据
Dec 13 #Python
pandas抽取行列数据的几种方法
Dec 13 #Python
python3.9实现pyinstaller打包python文件成exe
Dec 13 #Python
Pandas中两个dataframe的交集和差集的示例代码
Dec 13 #Python
使用pandas实现筛选出指定列值所对应的行
Dec 13 #Python
You might like
CodeIgniter输出中文乱码的两种解决办法
2014/06/12 PHP
异步加载技术实现当滚动条到最底部的瀑布流效果
2014/09/16 PHP
PHP获取数组长度或某个值出现次数的方法
2015/02/11 PHP
PHP数字前补0的自带函数sprintf 和number_format的用法(详解)
2017/02/06 PHP
nginx 设置多个站跨域
2021/03/09 Servers
YUI 读码日记之 YAHOO.util.Dom - Part.1
2008/03/22 Javascript
extjs 如何给column 加上提示
2014/07/29 Javascript
Nodejs实现的一个静态服务器实例
2014/12/06 NodeJs
jQuery结合CSS制作动态的下拉菜单
2015/10/27 Javascript
探讨JavaScript语句的执行过程
2016/01/28 Javascript
JavaScript获取当前url根目录(路径)
2016/06/17 Javascript
jquery radio的取值_radio的选中_radio的重置方法
2016/09/20 Javascript
详解jQuery简单的表格应用
2016/12/16 Javascript
bootstrap中添加额外的图标实例代码
2017/02/15 Javascript
jQuery实现Select下拉列表进行状态选择功能
2017/03/30 jQuery
Angular.js中angular-ui-router的简单实践
2017/07/18 Javascript
mongoose设置unique不生效问题的解决及如何移除unique的限制
2017/11/07 Javascript
NodeJS如何实现同步的方法示例
2018/08/24 NodeJs
JavaScript创建对象的四种常用模式实例分析
2019/01/11 Javascript
vue实现后台管理权限系统及顶栏三级菜单显示功能
2019/06/19 Javascript
Node.js在图片模板上生成二维码图片并附带底部文字说明实现详解
2019/08/07 Javascript
Emberjs 通过 axios 下载文件的方法
2019/09/03 Javascript
用Node写一条配置环境的指令
2019/11/14 Javascript
JavaScript中EventBus实现对象之间通信
2020/10/18 Javascript
[10:54]Team Spirit vs Navi
2018/06/07 DOTA
讲解Python中if语句的嵌套用法
2015/05/14 Python
Python实现简易Web爬虫详解
2018/01/03 Python
Python实现深度遍历和广度遍历的方法
2019/01/22 Python
关于PyTorch源码解读之torchvision.models
2019/08/17 Python
python日期与时间戳的各种转换示例
2020/02/12 Python
python爬虫scrapy框架的梨视频案例解析
2021/02/20 Python
医院保洁服务方案
2014/06/11 职场文书
退休党员个人对照检查材料思想汇报
2014/09/29 职场文书
员工升职自荐信
2015/03/27 职场文书
行政主管岗位职责范本
2015/04/09 职场文书
css3实现背景图片颜色修改的多种方式
2021/04/13 HTML / CSS