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改变日志(logging)存放位置的示例
Mar 27 Python
Java中重定向输出流实现用文件记录程序日志
Jun 12 Python
Python控制多进程与多线程并发数总结
Oct 26 Python
Python带动态参数功能的sqlite工具类
May 26 Python
Python分割指定页数的pdf文件方法
Oct 26 Python
python生成lmdb格式的文件实例
Nov 08 Python
浅谈python脚本设置运行参数的方法
Dec 03 Python
python 的 openpyxl模块 读取 Excel文件的方法
Sep 09 Python
pytest进阶教程之fixture函数详解
Mar 29 Python
单身狗福利?Python爬取某婚恋网征婚数据
Jun 03 Python
PyTorch中permute的使用方法
Apr 26 Python
Python实现双向链表
May 25 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
Win2003下APACHE+PHP5+MYSQL4+PHPMYADMIN 的简易安装配置
2006/11/18 PHP
php类中private属性继承问题分析
2012/11/01 PHP
PHP 自动加载类原理与用法实例分析
2020/04/14 PHP
对采用动态原型方式无法展示继承机制得思考
2009/12/04 Javascript
High Performance JavaScript(高性能JavaScript)读书笔记分析
2011/05/05 Javascript
js setTimeout 常见问题小结
2013/08/13 Javascript
js倒计时小程序
2013/11/05 Javascript
jQuery多级弹出菜单插件ZoneMenu
2014/12/18 Javascript
Node.js开发者必须了解的4个JS要点
2016/02/21 Javascript
微信小程序开发之入门实例教程篇
2017/03/07 Javascript
Vue.js移动端左滑删除组件的实现代码
2017/09/08 Javascript
nodejs Assert中equal(),strictEqual(),deepEqual(),strictDeepEqual()比较
2017/09/18 NodeJs
微信小程序实现自上而下字幕滚动
2018/07/14 Javascript
微信小程序云开发之使用云函数
2019/05/17 Javascript
JavaScript实现公告栏上下滚动效果
2020/03/13 Javascript
[01:08:24]DOTA2-DPC中国联赛 正赛 RNG vs Phoenix BO3 第一场 2月5日
2021/03/11 DOTA
pandas 数据归一化以及行删除例程的方法
2018/11/10 Python
用uWSGI和Nginx部署Flask项目的方法示例
2019/05/05 Python
python整合ffmpeg实现视频文件的批量转换
2019/05/31 Python
tensorboard 可以显示graph,却不能显示scalar的解决方式
2020/02/15 Python
详解python polyscope库的安装和例程
2020/11/13 Python
CSS3制作缩略图的详细过程
2016/07/08 HTML / CSS
HTML5 video标签(播放器)学习笔记(二):播放控制
2015/04/24 HTML / CSS
加拿大最大的钻石商店:Peoples Jewellers
2018/01/01 全球购物
自荐信要包含哪些内容
2013/11/06 职场文书
自我评价的写作规则
2014/01/06 职场文书
大学生职业规划论文
2014/01/11 职场文书
18岁生日感言
2014/01/12 职场文书
预备党员转正思想汇报
2014/09/26 职场文书
团队会宣传标语
2014/10/09 职场文书
2014年宣传部工作总结
2014/11/12 职场文书
有限责任公司股东合作协议书
2014/12/02 职场文书
python实现股票历史数据可视化分析案例
2021/06/10 Python
mysql 数据插入优化方法之concurrent_insert
2021/07/01 MySQL
实操Python爬取觅知网素材图片示例
2021/11/27 Python
vue中data里面的数据相互使用方式
2022/06/05 Vue.js