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的Bottle框架中获取制定cookie的教程
Apr 24 Python
python使用urllib2实现发送带cookie的请求
Apr 28 Python
Python中unittest模块做UT(单元测试)使用实例
Jun 12 Python
Python深度优先算法生成迷宫
Jan 22 Python
pandas通过索引进行排序的示例
Nov 16 Python
python使用正则筛选信用卡
Jan 27 Python
对python特殊函数 __call__()的使用详解
Jul 02 Python
Django用户认证系统 User对象解析
Aug 02 Python
pytorch: Parameter 的数据结构实例
Dec 31 Python
TensorFlow 多元函数的极值实例
Feb 10 Python
Numpy数组的广播机制的实现
Nov 03 Python
python源码剖析之PyObject详解
May 18 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分页类代码
2013/04/02 PHP
php获取网卡的MAC地址支持WIN/LINUX系统
2014/04/30 PHP
php面象对象数据库操作类实例
2014/12/02 PHP
js中indexof的用法详细解析
2013/12/24 Javascript
JavaScript获取客户端计算机硬件及系统等信息的方法
2014/01/02 Javascript
js与css实现弹出层覆盖整个页面的方法
2014/12/13 Javascript
Svg.js实例教程及使用手册详解(一)
2016/05/16 Javascript
js获取当前年月日-YYYYmmDD格式的实现代码
2016/06/01 Javascript
jQuery实现花式轮播之圣诞节礼物传送效果
2016/12/25 Javascript
JavaScript 函数的定义-调用、注意事项
2017/04/16 Javascript
深入理解nodejs中Express的中间件
2017/05/19 NodeJs
nodejs实现连接mongodb数据库的方法示例
2018/03/15 NodeJs
小程序实现人脸识别功能(百度ai)
2018/12/23 Javascript
Jquery的Ajax技术使用方法
2019/01/21 jQuery
vue中beforeRouteLeave实现页面回退不刷新的示例代码
2019/11/01 Javascript
win10系统中安装scrapy-1.1
2016/07/03 Python
利用Celery实现Django博客PV统计功能详解
2017/05/08 Python
Python基于csv模块实现读取与写入csv数据的方法
2018/01/18 Python
如何基于python实现画不同品种的樱花树
2020/01/03 Python
pytorch torchvision.ImageFolder的用法介绍
2020/02/20 Python
python3中calendar返回某一时间点实例讲解
2020/11/18 Python
深入解析HTML5使用SVG图像时的viewBox属性用法
2015/09/02 HTML / CSS
Skyscanner英国:苏格兰的全球三大领先航班搜索服务之一
2017/11/09 全球购物
澳大利亚领先的折扣药房:Chemist Direct(有中文站)
2018/11/24 全球购物
ghd法国官方网站:英国最受欢迎的美发工具品牌
2019/04/18 全球购物
英国泽西岛植物:Jersey Plants Direct
2019/08/07 全球购物
特色冷饮店创业计划书
2014/01/28 职场文书
演讲稿格式范文
2014/05/19 职场文书
办公用房租赁协议书
2014/11/29 职场文书
租赁协议书
2015/01/27 职场文书
优秀团员自我评价
2015/03/10 职场文书
学校证明范文
2015/06/24 职场文书
辞职离别感言
2015/08/04 职场文书
Python opencv缺陷检测的实现及问题解决
2021/04/24 Python
MySQL 表空间碎片的概念及相关问题解决
2021/05/07 MySQL
实例详解Python的进程,线程和协程
2022/03/13 Python