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将mdb数据库文件导入postgresql数据库示例
Feb 17 Python
Python中的进程分支fork和exec详解
Apr 11 Python
python简单实现旋转图片的方法
May 30 Python
用python处理MS Word的实例讲解
May 08 Python
python3.x实现发送邮件功能
May 22 Python
对python opencv 添加文字 cv2.putText 的各参数介绍
Dec 05 Python
python3使用flask编写注册post接口的方法
Dec 28 Python
python设置随机种子实例讲解
Sep 12 Python
python各层级目录下import方法代码实例
Jan 20 Python
Python GUI编程学习笔记之tkinter事件绑定操作详解
Mar 30 Python
基于python和flask实现http接口过程解析
Jun 15 Python
Python实现一个优先级队列的方法
Jul 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
php a simple smtp class
2007/11/26 PHP
关于二级目录拖拽排序的实现(源码示例下载)
2013/04/26 PHP
php生成缩略图示例代码分享(使用gd库实现)
2014/01/20 PHP
php实现只保留mysql中最新1000条记录
2015/06/18 PHP
PHP基于接口技术实现简单的多态应用完整实例
2017/04/26 PHP
php查看一个变量的占用内存的实例代码
2020/03/29 PHP
javascript URL编码和解码使用说明
2010/04/12 Javascript
javascript测试题练习代码
2012/10/10 Javascript
使用forever管理nodejs应用教程
2014/06/03 NodeJs
jQuery中DOM树操作之复制元素的方法
2015/01/23 Javascript
详解JavaScript中的every()方法
2015/06/08 Javascript
详解使用create-react-app快速构建React开发环境
2018/05/16 Javascript
vue之a-table中实现清空选中的数据
2019/11/07 Javascript
解决vue-cli@3.xx安装不成功的问题及搭建ts-vue项目
2020/02/09 Javascript
Vue实现简单计算器案例
2020/02/25 Javascript
使用python编写批量卸载手机中安装的android应用脚本
2014/07/21 Python
python开发之基于thread线程搜索本地文件的方法
2015/11/11 Python
Python和C/C++交互的几种方法总结
2017/05/11 Python
小白如何入门Python? 制作一个网站为例
2018/03/06 Python
解决python通过cx_Oracle模块连接Oracle乱码的问题
2018/10/18 Python
Python3 把一个列表按指定数目分成多个列表的方式
2019/12/25 Python
Pyecharts绘制全球流向图的示例代码
2020/01/08 Python
Python中pyecharts安装及安装失败的解决方法
2020/02/18 Python
python GUI库图形界面开发之PyQt5 UI主线程与耗时线程分离详细方法实例
2020/02/26 Python
Python控制台实现交互式环境执行
2020/06/09 Python
澳大利亚宠物食品和药物在线:Jumbo Pets
2018/03/24 全球购物
澳大利亚汽车零部件、音响及配件超市:Automotive Superstore
2018/06/19 全球购物
Tenstickers法国:墙贴和装饰贴纸
2019/08/26 全球购物
娇韵诗Clarins意大利官方网站:法国天然护肤品牌
2020/03/11 全球购物
2014年敬老院工作总结
2014/12/08 职场文书
秋收起义观后感
2015/06/11 职场文书
爱的教育读书笔记
2015/06/26 职场文书
2017元旦、春节期间廉洁自律承诺书
2016/03/25 职场文书
五年级作文之成长
2019/09/16 职场文书
win10系统xps文件怎么打开?win10打开xps文件的两种操作方法
2022/07/23 数码科技
windows11选中自动复制怎么开启? Win11自动复制所选内容的方法
2022/07/23 数码科技