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 实现上传图片并预览的3种方法(推荐)
Jul 14 Python
Python基于回溯法子集树模板解决找零问题示例
Sep 11 Python
python 随机数使用方法,推导以及字符串,双色球小程序实例
Sep 12 Python
python清除字符串中间空格的实例讲解
May 11 Python
Python文件如何引入?详解引入Python文件步骤
Dec 10 Python
python 执行文件时额外参数获取的实例
Dec 18 Python
python能做什么 python的含义
Oct 12 Python
基于python plotly交互式图表大全
Dec 07 Python
Python unittest单元测试openpyxl实现过程解析
May 27 Python
python 实现图像快速替换某种颜色
Jun 04 Python
Python 列表中的修改、添加和删除元素的实现
Jun 11 Python
python 如何引入协程和原理分析
Nov 30 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读取excel文件示例分享(更新修改excel)
2014/02/27 PHP
php获取小程序码的实现代码(B类接口)
2020/06/13 PHP
Javascript - HTML的request类
2007/01/09 Javascript
javascript 简单抽屉效果的实现代码
2010/03/09 Javascript
了解jQuery技巧来提高你的代码(个人觉得那个jquery的手册很不错)
2012/02/10 Javascript
jQuery实现图片放大预览实现原理及代码
2013/09/12 Javascript
巧用Vue.js+Vuex制作专门收藏微信公众号的app
2016/11/03 Javascript
JS实现拖拽的方法分析
2016/12/20 Javascript
微信小程序 密码输入(源码下载)
2017/06/27 Javascript
简单快速的实现js计算器功能
2017/08/17 Javascript
详解vue中使用express+fetch获取本地json文件
2017/10/10 Javascript
浅谈Postman解决token传参的问题
2018/03/31 Javascript
JavaScript对象拷贝与Object.assign用法实例分析
2018/06/20 Javascript
vue.js响应式原理解析与实现
2020/06/22 Javascript
JavaScript基础之this和箭头函数详析
2019/09/05 Javascript
解决vuex刷新数据消失问题
2020/11/12 Javascript
[09:37]2018DOTA2国际邀请赛寻真——不懈追梦的Team Serenity
2018/08/13 DOTA
教你如何在Django 1.6中正确使用 Signal
2014/06/22 Python
把MySQL表结构映射为Python中的对象的教程
2015/04/07 Python
使用PDB简单调试Python程序简明指南
2015/04/25 Python
深入讲解Python中面向对象编程的相关知识
2015/05/25 Python
关于python的list相关知识(推荐)
2017/08/30 Python
详解Python list和numpy array的存储和读取方法
2019/11/06 Python
Python如何基于Tesseract实现识别文字功能
2020/06/05 Python
Python基于time模块表示时间常用方法
2020/06/18 Python
美国男装连锁零售商:Men’s Wearhouse
2016/10/14 全球购物
丝芙兰巴西官方商城:SEPHORA巴西
2016/10/31 全球购物
简述数据库的设计过程
2015/06/22 面试题
什么是网络协议
2016/04/07 面试题
工程力学专业毕业生求职信
2013/10/06 职场文书
《学会待客》教学反思
2014/02/22 职场文书
中学生励志演讲稿
2014/04/26 职场文书
工商干部先进事迹
2014/05/14 职场文书
学校师德师风自我剖析材料
2014/09/29 职场文书
硕士论文致谢范文
2015/05/14 职场文书