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实现数通设备tftp备份配置文件示例
Apr 02 Python
跟老齐学Python之编写类之一创建实例
Oct 11 Python
在Python中使用PIL模块处理图像的教程
Apr 29 Python
Python内置函数OCT详解
Nov 09 Python
python实现感知器算法详解
Dec 19 Python
Python常见字典内建函数用法示例
May 14 Python
python3 cvs将数据读取为字典的方法
Dec 22 Python
Python如何筛选序列中的元素的方法实现
Jul 15 Python
python实现微信小程序用户登录、模板推送
Aug 28 Python
基于Python+QT的gui程序开发实现
Jul 03 Python
详解pycharm2020.1.1专业版安装指南(推荐)
Aug 07 Python
python中xlutils库用法浅析
Dec 29 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
PHP 5.3.0 安装分析心得
2009/08/07 PHP
PHP微信红包API接口
2015/12/05 PHP
PHP单例模式与工厂模式详解
2017/08/29 PHP
js异常捕获方法介绍
2013/04/10 Javascript
appendChild() 或 insertBefore()使用与区别介绍
2013/10/11 Javascript
分享Javascript中最常用的55个经典小技巧
2013/11/29 Javascript
用js判断输入是否为中文的函数
2014/03/10 Javascript
javascript中定义类的方法汇总
2014/12/28 Javascript
javascript中arguments,callee,caller详解
2016/03/16 Javascript
javascript基础语法——全面理解变量和标识符
2016/06/02 Javascript
Bootstrap3 datetimepicker控件使用实例
2016/12/13 Javascript
详解用vue.js和laravel实现微信授权登陆
2017/06/23 Javascript
jQuery获取所有父级元素及同级元素及子元素的方法(推荐)
2018/01/21 jQuery
JavaScript中使用import 和require打包后实现原理分析
2018/03/07 Javascript
vue中keep-alive内置组件缓存的实例代码
2020/04/16 Javascript
vue+element_ui上传文件,并传递额外参数操作
2020/12/05 Vue.js
Python采用socket模拟TCP通讯的实现方法
2014/11/19 Python
python多线程用法实例详解
2015/01/15 Python
用Python编写一个基于终端的实现翻译的脚本
2015/04/24 Python
mvc框架打造笔记之wsgi协议的优缺点以及接口实现
2018/08/01 Python
Django项目中添加ldap登陆认证功能的实现
2019/04/04 Python
计算机二级python学习教程(1) 教大家如何学习python
2019/05/16 Python
Python 获取命令行参数内容及参数个数的实例
2019/12/20 Python
Python数据相关系数矩阵和热力图轻松实现教程
2020/06/16 Python
详解CSS3中border-image的使用
2015/07/18 HTML / CSS
HTML5 拖放(Drag 和 Drop)详解与实例代码
2017/09/14 HTML / CSS
垃圾回收的优点和原理。并考虑2种回收机制
2016/10/16 面试题
美术专业个人自我评价
2014/01/18 职场文书
大学同学聚会邀请函
2014/01/29 职场文书
第一批党的群众路线教育实践活动工作总结
2014/03/03 职场文书
公司市场专员岗位职责
2014/06/29 职场文书
意外伤害赔偿协议书范本
2014/09/28 职场文书
工作失误检讨书
2015/01/26 职场文书
国庆阅兵观后感
2015/06/15 职场文书
幼儿园奖惩制度范本
2015/08/05 职场文书
前端vue+express实现文件的上传下载示例
2022/02/18 Vue.js