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实现一个简单的多线程TCP服务器的教程
May 05 Python
Python base64编码解码实例
Jun 21 Python
Python实现截屏的函数
Jul 26 Python
Python连接mysql数据库的正确姿势
Feb 03 Python
Python基础之文件读取的讲解
Feb 16 Python
python如何制作缩略图
Apr 30 Python
python创建学生成绩管理系统
Nov 22 Python
Django框架教程之中间件MiddleWare浅析
Dec 29 Python
python加密解密库cryptography使用openSSL生成的密匙加密解密
Feb 11 Python
python实现坦克大战
Apr 24 Python
使用gunicorn部署django项目的问题
Dec 30 Python
Python爬虫基础之简单说一下scrapy的框架结构
Jun 26 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作的文本留言本的例子(六)
2006/10/09 PHP
完美解决dedecms中的[html][/html]和[code][/code]问题
2007/03/20 PHP
无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装(win+linux)
2012/05/05 PHP
深入for,while,foreach遍历时间比较的详解
2013/06/08 PHP
PHP获取当前url的具体方法全面解析
2013/11/26 PHP
一个基于phpQuery的php通用采集类分享
2014/04/09 PHP
jQuery+PHP发布的内容进行无刷新分页(Fckeditor)
2015/10/22 PHP
CI框架源码解读之利用Hook.php文件完成功能扩展的方法
2016/05/18 PHP
转自Jquery官方 jQuery1.1.3发布,速度提升800%,体积保持20K
2007/08/19 Javascript
用dtree实现树形菜单 dtree使用说明
2011/10/17 Javascript
在新窗口打开超链接的方法小结
2013/04/14 Javascript
使用insertAfter()方法在现有元素后添加一个新元素
2014/05/28 Javascript
Javascript typeof与instanceof的区别
2016/10/18 Javascript
javascript-解决mongoose数据查询的异步操作
2016/12/22 Javascript
Nodejs回调加超时限制两种实现方法
2017/06/09 NodeJs
各种选择框jQuery的选中方法(实例讲解)
2017/06/27 jQuery
jQuery表单设置值的方法
2017/06/30 jQuery
Angular5中调用第三方js插件的方法
2018/02/26 Javascript
vue实现树形菜单效果
2018/03/19 Javascript
vue 根据数组中某一项的值进行排序的方法
2018/08/30 Javascript
uni-app如何实现增量更新功能
2020/01/03 Javascript
TypeScript 引用资源文件后提示找不到的异常处理技巧
2020/07/15 Javascript
swiper4实现移动端导航栏tab滑动切换
2020/10/16 Javascript
[00:14]PWL:老朋友Mushi拍VLOG与中国玩家问好
2020/11/04 DOTA
Python计算回文数的方法
2015/03/11 Python
Python抓取手机号归属地信息示例代码
2016/11/28 Python
python下setuptools的安装详解及No module named setuptools的解决方法
2017/07/06 Python
《Python学习手册》学习总结
2018/01/17 Python
PyQt5每天必学之像素图控件QPixmap
2018/04/19 Python
PyTorch之nn.ReLU与F.ReLU的区别介绍
2020/06/27 Python
纯CSS3实现的8种Loading动画效果
2014/07/05 HTML / CSS
HTML实现代码雨源码及效果示例
2020/02/25 HTML / CSS
学生档案自我鉴定
2013/10/07 职场文书
乡镇办公室工作决心书
2014/03/11 职场文书
销售求职信范文
2014/05/26 职场文书
关于公司年会的开幕词
2016/03/04 职场文书