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发送邮件附件以定时备份MySQL的教程
Apr 25 Python
python导入时小括号大作用
Jan 10 Python
使用python 和 lint 删除项目无用资源的方法
Dec 20 Python
python使用itchat实现手机控制电脑
Feb 22 Python
详解PyTorch批训练及优化器比较
Apr 28 Python
python 通过 socket 发送文件的实例代码
Aug 14 Python
Python中zip()函数的简单用法举例
Sep 02 Python
Python3.7安装keras和TensorFlow的教程图解
Jun 18 Python
在tensorflow中设置保存checkpoint的最大数量实例
Jan 21 Python
python闭包、深浅拷贝、垃圾回收、with语句知识点汇总
Mar 11 Python
python Selenium 库的使用技巧
Oct 16 Python
【超详细】八大排序算法的各项比较以及各自特点
Mar 31 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中SESSION使用中的一点经验总结
2012/03/30 PHP
浅析php变量作用域的一些问题
2013/08/08 PHP
php中读写文件与读写数据库的效率比较分享
2013/10/19 PHP
解决jquery .ajax 在IE下卡死问题的解决方法
2009/10/26 Javascript
picChange 图片切换特效的函数代码
2010/05/06 Javascript
JavaScript原型继承之基础机制分析
2011/08/26 Javascript
在Node.js应用中使用Redis的方法简介
2015/06/24 Javascript
angularjs在ng-repeat中使用ng-model遇到的问题
2016/01/21 Javascript
Javascript中的Prototype到底是什么
2016/02/16 Javascript
jQuery中的通配符选择器使用总结
2016/05/30 Javascript
jQuery焦点图轮播效果实现方法
2016/12/19 Javascript
基于jquery实现多选下拉列表
2017/08/02 jQuery
JS实现基于Sketch.js模拟成群游动的蝌蚪运动动画效果【附demo源码下载】
2017/08/18 Javascript
基于Node.js的大文件分片上传示例
2019/06/19 Javascript
js prototype和__proto__的关系是什么
2019/08/23 Javascript
JS实现可视化音频效果的实例代码
2020/01/16 Javascript
es6中Promise 对象基本功能与用法实例分析
2020/02/23 Javascript
Python的Flask框架中实现分页功能的教程
2015/04/20 Python
python字符串,数值计算
2016/10/05 Python
解读! Python在人工智能中的作用
2017/11/14 Python
python机器学习实战之K均值聚类
2017/12/20 Python
python3实现名片管理系统
2020/11/29 Python
Django自定义模板过滤器和标签的实现方法
2019/08/21 Python
python中的TCP(传输控制协议)用法实例分析
2019/11/15 Python
python sorted方法和列表使用解析
2019/11/18 Python
Python实现随机取一个矩阵数组的某几行
2019/11/26 Python
matplotlib quiver箭图绘制案例
2020/04/17 Python
详解查看Python解释器路径的两种方式
2020/10/15 Python
基于Python的身份证验证识别和数据处理详解
2020/11/14 Python
html5中audio支持音频格式的解决方法
2018/08/24 HTML / CSS
日本酒店、民宿、温泉旅馆、当地旅行团中文预订:e路东瀛
2019/12/09 全球购物
水果连锁超市创业计划书
2014/01/24 职场文书
《学会合作》教学反思
2014/04/12 职场文书
竞选村长演讲稿
2014/04/28 职场文书
2015年教师业务工作总结
2015/05/26 职场文书