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 相关文章推荐
numpy的文件存储.npy .npz 文件详解
Jul 09 Python
Python中的单行、多行、中文注释方法
Jul 19 Python
使用Python获取并处理IP的类型及格式方法
Nov 01 Python
Python for i in range ()用法详解
Sep 18 Python
Flask中endpoint的理解(小结)
Dec 11 Python
使用Python给头像加上圣诞帽或圣诞老人小图标附源码
Dec 25 Python
详解python常用命令行选项与环境变量
Feb 20 Python
Python实现分数序列求和
Feb 25 Python
pycharm远程连接vagrant虚拟机中mariadb数据库
Jun 05 Python
基于python实现计算两组数据P值
Jul 10 Python
Python内置函数及功能简介汇总
Oct 13 Python
简单介绍Python的第三方库yaml
Jun 18 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中养成7个面向对象的好习惯
2010/07/17 PHP
ThinkPHP多语言支持与多模板支持概述
2014/08/22 PHP
php自动更新版权信息显示的方法
2015/06/19 PHP
php中preg_match的isU代表什么意思
2015/10/01 PHP
ubutu 16.04环境下,PHP与mysql数据库,网页登录验证实例讲解
2017/07/20 PHP
jQuery入门第一课 jQuery选择符
2010/03/14 Javascript
用JS控制回车事件的代码
2011/02/20 Javascript
jquery命令汇总,方便使用jquery的朋友
2012/06/26 Javascript
javaScript复制功能调用实现方案
2012/12/13 Javascript
为什么要在引入的css或者js文件后面加参数的详细讲解
2013/05/03 Javascript
JS调试必备的5个debug技巧
2014/03/07 Javascript
javascript获取checkbox复选框获取选中的选项
2014/08/12 Javascript
使用js获取图片原始尺寸
2014/12/03 Javascript
jQuery中DOM节点删除之empty与remove
2017/01/20 Javascript
超全面的JavaScript开发规范(推荐)
2017/01/21 Javascript
javascript获取指定区间范围随机数的方法
2017/09/08 Javascript
详解webpack + vue + node 打造单页面(入门篇)
2017/09/23 Javascript
vue弹窗消息组件的使用方法
2020/09/24 Javascript
React全家桶环境搭建过程详解
2018/05/18 Javascript
用node.js写一个jenkins发版脚本
2019/05/21 Javascript
Vue配置marked链接添加target="_blank"的方法
2019/07/19 Javascript
vue-froala-wysiwyg 富文本编辑器功能
2019/09/19 Javascript
基于Nuxt.js项目的服务端性能优化与错误检测(容错处理)
2019/10/23 Javascript
vue-列表下详情的展开与折叠案例
2020/07/28 Javascript
微信小程序调用后台service教程详解
2020/11/06 Javascript
Vue SPA 首屏优化方案
2021/02/26 Vue.js
[48:39]Ti4主赛事胜者组第一天 EG vs NEWBEE 2
2014/07/19 DOTA
Python按行读取文件的简单实现方法
2016/06/22 Python
总结python实现父类调用两种方法的不同
2017/01/15 Python
Python英文文本分词(无空格)模块wordninja的使用实例
2019/02/20 Python
L’urv官网:精品女性运动服品牌
2019/07/07 全球购物
工地安全标语
2014/06/07 职场文书
党员干部群众路线个人整改措施
2014/09/18 职场文书
担保书格式
2015/01/20 职场文书
刘胡兰观后感
2015/06/16 职场文书
vue如何使用模拟的json数据查看效果
2022/03/31 Vue.js