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 list中append()与extend()用法分享
Mar 24 Python
pandas按若干个列的组合条件筛选数据的方法
Apr 11 Python
python实现Dijkstra静态寻路算法
Jan 17 Python
Python实现统计英文文章词频的方法分析
Jan 28 Python
浅谈python中统计计数的几种方法和Counter详解
Nov 07 Python
numpy np.newaxis 的实用分享
Nov 30 Python
python装饰器的特性原理详解
Dec 25 Python
详解Python3中的 input() 函数
Mar 18 Python
python实现udp传输图片功能
Mar 20 Python
python实现将列表中各个值快速赋值给多个变量
Apr 02 Python
python查看矩阵的行列号以及维数方式
May 22 Python
JAVA SpringMVC实现自定义拦截器
Mar 16 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中将字符串转为HTML的实体引用的一个类
2013/02/03 PHP
PHP FATAL ERROR: CALL TO UNDEFINED FUNCTION BCMUL()解决办法
2014/05/04 PHP
PHP7匿名类用法分析
2016/09/26 PHP
Laravel 实现密码重置功能
2018/02/23 PHP
详解php中生成标准uuid(guid)的方法
2019/04/28 PHP
Laravel获取当前请求的控制器和方法以及中间件的例子
2019/10/11 PHP
PHP7 foreach() 函数修改
2021/03/09 PHP
页面载入结束自动调用js函数示例
2013/09/23 Javascript
JS实现点击上移下移LI行数据的方法
2015/08/05 Javascript
js数组如何添加json数据及js数组与json的区别
2015/10/27 Javascript
jquery实现移动端点击图片查看大图特效
2020/09/11 Javascript
微信小程序 简单DEMO布局,逻辑,样式的练习
2016/11/30 Javascript
浅谈jQuery hover(over, out)事件函数
2016/12/03 Javascript
使用BootStrap建立响应式网页——通栏轮播图(carousel)
2016/12/21 Javascript
jquery 实现复选框的全选操作实例代码
2017/01/24 Javascript
es6系列教程_ Map详解以及常用api介绍
2017/09/25 Javascript
深入浅析vue组件间事件传递
2017/12/29 Javascript
深入分析element ScrollBar滚动组件源码
2019/01/22 Javascript
过滤器vue.filters的使用方法实现
2019/09/18 Javascript
如何使用python爬取csdn博客访问量
2016/02/14 Python
Python的Django框架中使用SQLAlchemy操作数据库的教程
2016/06/02 Python
python中set()函数简介及实例解析
2018/01/09 Python
python中利用zfill方法自动给数字前面补0
2018/04/10 Python
基于Python的PIL库学习详解
2019/05/10 Python
pytorch中如何使用DataLoader对数据集进行批处理的方法
2019/08/06 Python
如何分离django中的媒体、静态文件和网页
2019/11/12 Python
Python文本文件的合并操作方法代码实例
2020/03/31 Python
使用scrapy ImagesPipeline爬取图片资源的示例代码
2020/09/28 Python
用python 绘制茎叶图和复合饼图
2021/02/26 Python
CSS3 实现雷达扫描图的示例代码
2020/09/21 HTML / CSS
大学生最常用的自我评价
2013/12/07 职场文书
2015年主婚人婚礼致辞
2015/07/28 职场文书
教师学习心得体会范文
2016/01/21 职场文书
意外事故赔偿协议书
2016/03/22 职场文书
Redis 持久化 RDB 与 AOF的执行过程
2021/11/07 Redis
《废话连篇——致新手》——chinapizza
2022/04/05 无线电