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中使用urllib2模块编写爬虫的简单上手示例
Jan 20 Python
浅析Python中的getattr(),setattr(),delattr(),hasattr()
Jun 14 Python
python 读取鼠标点击坐标的实例
Dec 29 Python
Python字典的基本用法实例分析【创建、增加、获取、修改、删除】
Mar 05 Python
Python实现爬取亚马逊数据并打印出Excel文件操作示例
May 16 Python
PyQt 实现使窗口中的元素跟随窗口大小的变化而变化
Jun 18 Python
django 配置阿里云OSS存储media文件的例子
Aug 20 Python
浅谈Django QuerySet对象(模型.objects)的常用方法
Mar 28 Python
PyQt5连接MySQL及QMYSQL driver not loaded错误解决
Apr 29 Python
基于python生成英文版词云图代码实例
May 16 Python
浅谈Python爬虫原理与数据抓取
Jul 21 Python
python3.8动态人脸识别的实现示例
Sep 21 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
php重定向的三种方法分享
2012/02/22 PHP
几道坑人的PHP面试题 试试看看你会不会也中招
2014/08/19 PHP
php函数serialize()与unserialize()用法实例
2014/11/06 PHP
php操作xml入门之xml基本介绍及xml标签元素
2015/01/23 PHP
mod_php、FastCGI、PHP-FPM等PHP运行方式对比
2015/07/02 PHP
在WordPress的后台中添加顶级菜单和子菜单的函数详解
2016/01/11 PHP
ThinkPHP连接Oracle数据库
2016/04/22 PHP
PHP中Trait及其应用详解
2017/02/14 PHP
php实现基于PDO的预处理示例
2017/03/28 PHP
Prototype Class对象学习
2009/07/19 Javascript
jquery重新播放css动画所遇问题解决
2013/08/21 Javascript
jquery cookie实现的简单换肤功能适合小网站
2013/08/25 Javascript
JavaScript中跨域调用Flash的方法
2014/08/11 Javascript
javascript原型模式用法实例详解
2015/06/04 Javascript
js下拉选择框与输入框联动实现添加选中值到输入框的方法
2015/08/17 Javascript
总结javascript中的六种迭代器
2016/08/16 Javascript
ES2015 Symbol 一种绝不重复的值
2016/12/25 Javascript
Angular弹出模态框的两种方式
2017/10/19 Javascript
AngularJS使用Filter自定义过滤器控制ng-repeat去除重复功能示例
2018/04/21 Javascript
手把手教你vue-cli单页到多页应用的方法
2018/05/31 Javascript
[40:05]LGD vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
django富文本编辑器的实现示例
2019/04/10 Python
python 计算数据偏差和峰度的方法
2019/06/29 Python
使用Python实现跳一跳自动跳跃功能
2019/07/10 Python
python使用建议与技巧分享(二)
2020/08/17 Python
html5实现canvas阴影效果示例
2014/05/07 HTML / CSS
POP文化和音乐灵感的时尚:Hot Topic
2019/06/19 全球购物
一篇.NET面试题
2014/09/29 面试题
高中地理教学反思
2014/01/29 职场文书
战略合作意向书范本
2014/04/01 职场文书
开门红主持词
2014/04/02 职场文书
我的中国梦演讲稿800字
2014/08/19 职场文书
旅游活动总结
2014/08/27 职场文书
2015年酒店服务员工作总结
2015/05/18 职场文书
公司职员入党自传书
2015/06/26 职场文书
HTML中的表单Form实现居中效果
2021/05/25 HTML / CSS