pandas将list数据拆分成行或列的实现


Posted in Python onDecember 13, 2020

数据

import numpy as np
import pandas as pd

data = [{'Name': '小明', 'Chinese': [70, 80], 'Math': [90, 80]},
    {'Name': '小红', 'Chinese': [70, 80, 90], 'Math': [90, 80, 70]}]
data = pd.DataFrame(data)
data

pandas将list数据拆分成行或列的实现

拆分成行

pandas将list数据拆分成行或列的实现

def split_row(data, column):
  '''拆分成行

  :param data: 原始数据
  :param column: 拆分的列名
  :type data: pandas.core.frame.DataFrame
  :type column: str
  '''
  row_len = list(map(len, data[column].values))
  rows = []
  for i in data.columns:
    if i == column:
      row = np.concatenate(data[i].values)
    else:
      row = np.repeat(data[i].values, row_len)
    rows.append(row)
  return pd.DataFrame(np.dstack(tuple(rows))[0], columns=data.columns)


split_row(data, column='Chinese')

拆分成列

pandas将list数据拆分成行或列的实现

from copy import deepcopy


def split_col(data, column):
  '''拆分成列

  :param data: 原始数据
  :param column: 拆分的列名
  :type data: pandas.core.frame.DataFrame
  :type column: str
  '''
  data = deepcopy(data)
  max_len = max(list(map(len, data[column].values))) # 最大长度
  new_col = data[column].apply(lambda x: x + [None]*(max_len - len(x))) # 补空值,None可换成np.nan
  new_col = np.array(new_col.tolist()).T # 转置
  for i, j in enumerate(new_col):
    data[column + str(i)] = j
  return data


split_col(data, column='Chinese')

其他情况

 1. 批量处理+不要原列

pandas将list数据拆分成行或列的实现

def split_col(data, columns):
  '''拆分成列

  :param data: 原始数据
  :param columns: 拆分的列名
  :type data: pandas.core.frame.DataFrame
  :type columns: list
  '''
  for c in columns:
    new_col = data.pop(c)
    max_len = max(list(map(len, new_col.values))) # 最大长度
    new_col = new_col.apply(lambda x: x + [None]*(max_len - len(x))) # 补空值,None可换成np.nan
    new_col = np.array(new_col.tolist()).T # 转置
    for i, j in enumerate(new_col):
      data[c + str(i)] = j


split_col(data, columns=['Chinese','Math'])
data

2. 带int和list数据

pandas将list数据拆分成行或列的实现

转成这样:

pandas将list数据拆分成行或列的实现

import numpy as np
import pandas as pd

data = [{'Name': '小爱', 'Chinese': 70, 'Math': 90},
    {'Name': '小明', 'Chinese': [70, 80], 'Math': [90, 80]},
    {'Name': '小红', 'Chinese': [70, 80, 90], 'Math': [90, 80, 70]}]
data = pd.DataFrame(data)

def split_col(data, columns):
  '''拆分成列

  :param data: 原始数据
  :param columns: 拆分的列名
  :type data: pandas.core.frame.DataFrame
  :type columns: list
  '''
  for c in columns:
    new_col = data.pop(c)
    max_len = max(list(map(lambda x:len(x) if isinstance(x, list) else 1, new_col.values))) # 最大长度
    new_col = new_col.apply(lambda x: x+[None]*(max_len - len(x)) if isinstance(x, list) else [x]+[None]*(max_len - 1)) # 补空值,None可换成np.nan
    new_col = np.array(new_col.tolist()).T # 转置
    for i, j in enumerate(new_col):
      data[c + str(i)] = j


split_col(data, columns=['Chinese','Math'])
data

参考文献

 Python Pandas list(列表)数据列拆分成多行的方法

10分钟了解Pandas基础知识

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

Python 相关文章推荐
python实现数独算法实例
Jun 09 Python
Python使用email模块对邮件进行编码和解码的实例教程
Jul 01 Python
使用Python对SQLite数据库操作
Apr 06 Python
django 常用orm操作详解
Sep 13 Python
python matplotlib 注释文本箭头简单代码示例
Jan 08 Python
Python使用pickle模块实现序列化功能示例
Jul 13 Python
windows下pycharm安装、创建文件、配置默认模板
Jul 31 Python
python lambda表达式(匿名函数)写法解析
Sep 16 Python
python json 递归打印所有json子节点信息的例子
Feb 27 Python
Mac PyCharm中的.gitignore 安装设置教程
Apr 16 Python
python用什么编辑器进行项目开发
Jun 17 Python
如何用 Python 子进程关闭 Excel 自动化中的弹窗
May 07 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
Pandas DataFrame求差集的示例代码
Dec 13 #Python
You might like
自动跳转中英文页面
2006/10/09 PHP
php下使用iconv需要注意的问题
2010/11/20 PHP
PHP扩展模块memcached长连接使用方法分析
2014/12/24 PHP
PHP使用PDO连接ACCESS数据库
2015/03/05 PHP
IE6不能修改NAME问题的解决方法
2010/09/03 Javascript
JQuery slideshow的一个小问题(如何发现及解决过程)
2013/02/06 Javascript
js获得鼠标的坐标值的方法
2013/03/13 Javascript
JavaScript获取路径设计源码
2014/05/22 Javascript
JS实现点击颜色块切换指定区域背景颜色的方法
2015/02/25 Javascript
JavaScript返回网页中锚点数目的方法
2015/04/03 Javascript
Javascript中的getUTCDay()方法使用详解
2015/06/10 Javascript
详解Bootstrap的aria-label和aria-labelledby应用
2016/01/04 Javascript
如何利用JS通过身份证号获取当事人的生日、年龄、性别
2016/01/22 Javascript
JS实现仿百度文库评分功能
2017/01/12 Javascript
Angular1.x自定义指令实例详解
2017/03/01 Javascript
jquery版轮播图效果和extend扩展
2017/07/18 jQuery
一文让你彻底搞清楚javascript中的require、import与export
2017/09/24 Javascript
Vue2.0 给Tab标签页和页面切换过渡添加样式的方法
2018/03/13 Javascript
JS实现关键词高亮显示正则匹配
2018/06/22 Javascript
小程序图片剪裁加旋转的示例代码
2018/07/10 Javascript
Vue-router 中hash模式和history模式的区别
2018/07/24 Javascript
服务端预渲染之Nuxt(使用篇)
2019/04/08 Javascript
React传值 组件传值 之间的关系详解
2019/08/26 Javascript
antdesign-vue结合sortablejs实现两个table相互拖拽排序功能
2021/01/08 Vue.js
使用Python的Flask框架构建大型Web应用程序的结构示例
2016/06/04 Python
NumPy 数组使用大全
2019/04/25 Python
Python time库基本使用方法分析
2019/12/13 Python
python文件绝对路径写法介绍(windows)
2019/12/25 Python
python实现扫雷小游戏
2020/04/24 Python
使用PyCharm官方中文语言包汉化PyCharm
2020/11/18 Python
法国时尚品牌乐都特瑞士站:La Redoute瑞士
2016/09/05 全球购物
瑞士隐形眼镜和护理产品网上商店:Linsenklick
2019/10/21 全球购物
安全教育心得体会
2013/12/29 职场文书
热爱祖国的演讲稿
2014/05/04 职场文书
工厂车间标语
2014/06/19 职场文书
2016形势与政策学习心得体会
2016/01/12 职场文书