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通过线程实现定时器timer的方法
Mar 16 Python
python中列表和元组的区别
Dec 18 Python
浅谈Python实现Apriori算法介绍
Dec 20 Python
对Python3 pyc 文件的使用详解
Feb 16 Python
python 求1-100之间的奇数或者偶数之和的实例
Jun 11 Python
python+opencv实现摄像头调用的方法
Jun 22 Python
Django框架之登录后自定义跳转页面的实现方法
Jul 18 Python
Django添加bootstrap框架时无法加载静态文件的解决方式
Mar 27 Python
tensorflow模型的save与restore,及checkpoint中读取变量方式
May 26 Python
Python基于smtplib模块发送邮件代码实例
May 29 Python
python利用faker库批量生成测试数据
Oct 15 Python
Python Pygame实现俄罗斯方块
Feb 19 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
php5编程中的异常处理详细方法介绍
2008/07/29 PHP
PHP多个版本的分析解释
2011/07/21 PHP
php获取ip的三个属性区别介绍(HTTP_X_FORWARDED_FOR,HTTP_VIA,REMOTE_ADDR)
2012/09/23 PHP
php上传图片存入数据库示例分享
2014/03/11 PHP
php实现的支持断点续传的文件下载类
2014/09/23 PHP
CI框架(CodeIgniter)公共模型类定义与用法示例
2017/08/10 PHP
Nigma vs Liquid BO3 第一场2.14
2021/03/10 DOTA
prototype1.4中文手册
2006/09/22 Javascript
经典的解除许多网站无法复制文字的绝招
2006/12/31 Javascript
Flash对联广告的关闭按钮讨论
2007/01/30 Javascript
javascript笔记 String类replace函数的一些事
2011/09/22 Javascript
用jquery方法操作radio使其默认选项是否
2013/09/10 Javascript
extjs render 用法介绍
2013/09/11 Javascript
jQuery中绑定事件bind() on() live() one()的异同
2017/02/23 Javascript
浏览器调试动态js脚本的方法(图解)
2018/01/19 Javascript
React Router v4 入坑指南(小结)
2018/04/08 Javascript
微信小程序支付前端源码
2018/08/29 Javascript
初学node.js中实现删除用户路由
2019/05/27 Javascript
小程序如何写动态标签的实现方法
2020/02/05 Javascript
原生js生成图片验证码
2020/10/11 Javascript
Python中的map()函数和reduce()函数的用法
2015/04/27 Python
numpy数组拼接简单示例
2017/12/15 Python
Python实现二叉树的常见遍历操作总结【7种方法】
2019/03/06 Python
python通过SSH登陆linux并操作的实现
2019/10/10 Python
Bally巴利中国官网:经典瑞士鞋履、手袋及配饰奢侈品牌
2018/10/09 全球购物
美国电力供应商店/电气批发商:USESI
2018/10/12 全球购物
Baby Tulai澳大利亚:美国婴儿背带品牌
2018/10/15 全球购物
佳能法国商店:Canon法国
2019/02/14 全球购物
Ruby如何进行文件操作
2014/07/17 面试题
高职助产应届生自荐信
2013/09/24 职场文书
公司周年庆典邀请函
2014/01/12 职场文书
行政部工作岗位职责范本
2014/03/05 职场文书
药店营业员岗位职责
2015/04/14 职场文书
简单的辞职信范文(2016最新版)
2015/05/12 职场文书
Springboot如何使用logback实现多环境配置?
2021/06/16 Java/Android
win11高清晰音频管理器在哪里?win11找不到高清晰音频管理器解决办法
2022/04/08 数码科技