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的Django框架完成视频处理任务的教程
Apr 02 Python
使用Python的Scrapy框架十分钟爬取美女图
Dec 26 Python
用不到50行的Python代码构建最小的区块链
Nov 16 Python
使用Python的Django和layim实现即时通讯的方法
May 25 Python
Python根据指定日期计算后n天,前n天是哪一天的方法
May 29 Python
Python类的继承用法示例
Jan 31 Python
Python常见的pandas用法demo示例
Mar 16 Python
Python中的四种交换数值的方法解析
Nov 18 Python
tensorflow的ckpt及pb模型持久化方式及转化详解
Feb 12 Python
python字符串下标与切片及使用方法
Feb 13 Python
python装饰器实现对异常代码出现进行自动监控的实现方法
Sep 15 Python
python闭包与引用以及需要注意的陷阱
Sep 18 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 和 HTML
2006/10/09 PHP
PHP连接和操作MySQL数据库基础教程
2014/09/29 PHP
PHP文件下载实例代码浅析
2016/08/17 PHP
一段好玩的JavaScript代码
2006/12/01 Javascript
JavaScript 通过模式匹配实现重载
2010/08/12 Javascript
Javascript面向对象编程(三) 非构造函数的继承
2011/08/28 Javascript
javascript 用函数语句和表达式定义函数的区别详解
2014/01/06 Javascript
jquery取子节点及当前节点属性值的方法
2014/09/09 Javascript
javascript学习笔记(二)数组和对象部分
2014/09/30 Javascript
浅谈JavaScript异常处理语句
2015/06/26 Javascript
jquery彩色投票进度条简单实例演示
2020/07/23 Javascript
jQuery事件处理的特征(事件命名机制)
2016/08/23 Javascript
关于RequireJS的简单介绍即使用方法
2016/10/20 Javascript
写jQuery插件时的注意点
2017/02/20 Javascript
react实现一个优雅的图片占位模块组件详解
2017/10/30 Javascript
webpack配置导致字体图标无法显示的解决方法
2018/03/06 Javascript
微信小程序 MinUI组件库系列之badge徽章组件示例
2018/08/20 Javascript
vue 使某个组件不被 keep-alive 缓存的方法
2018/09/21 Javascript
Vuex的初探与实战小结
2018/11/26 Javascript
详解Vue中的Props与Data细微差别
2020/03/02 Javascript
详解Vite的新体验
2021/02/22 Javascript
[29:59]完美世界DOTA2联赛PWL S3 Forest vs access 第二场 12.11
2020/12/13 DOTA
import的本质解析
2017/10/30 Python
Python微医挂号网医生数据抓取
2019/01/24 Python
Python csv文件的读写操作实例详解
2019/11/19 Python
Python Selenium参数配置方法解析
2020/01/19 Python
Tensorflow 模型转换 .pb convert to .lite实例
2020/02/12 Python
pyspark给dataframe增加新的一列的实现示例
2020/04/24 Python
Python JSON常用编解码方法代码实例
2020/09/05 Python
草莓巧克力:Shari’s Berries
2017/02/07 全球购物
德国最新街头服饰网上商店:BODYCHECK
2019/09/15 全球购物
大学新生欢迎词
2014/01/10 职场文书
阳光体育活动总结
2014/04/30 职场文书
离婚协议书应该怎么写
2014/10/12 职场文书
学生逃课万能检讨书2000字
2015/02/17 职场文书
“爱眼护眼,提前预防近视”倡议书3篇
2019/10/30 职场文书