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批量修改文件后缀的方法
Jan 26 Python
简单使用Python自动生成文章
Dec 25 Python
Python的SimpleHTTPServer模块用处及使用方法简介
Jan 22 Python
python控制windows剪贴板,向剪贴板中写入图片的实例
May 31 Python
详解pyenv下使用python matplotlib模块的问题解决
Nov 29 Python
解决Python下json.loads()中文字符出错的问题
Dec 19 Python
python 实现任务管理清单案例
Apr 25 Python
python爬虫把url链接编码成gbk2312格式过程解析
Jun 08 Python
python如何利用Mitmproxy抓包
Oct 10 Python
django使用channels实现通信的示例
Oct 19 Python
分析Python list操作为什么会错误
Nov 17 Python
python字符串的一些常见实用操作
Apr 06 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
php5 pdo新改动加载注意事项
2008/09/11 PHP
PHP生成Gif图片验证码
2013/10/27 PHP
解决laravel session失效的问题
2019/10/14 PHP
PHP isset()及empty()用法区别详解
2020/08/29 PHP
BOOM vs RR BO3 第一场2.13
2021/03/10 DOTA
Javascript 中的 call 和 apply使用介绍
2012/02/22 Javascript
JavaScript的模块化:封装(闭包),继承(原型) 介绍
2013/07/22 Javascript
js获取当前月的第一天和最后一天的小例子
2013/11/18 Javascript
用javascript替换URL中的参数值示例代码
2014/01/27 Javascript
js 绑定键盘鼠标事件示例代码
2014/02/12 Javascript
js实现的全国省市二级联动下拉选择菜单完整实例
2015/08/17 Javascript
js图片轮播特效代码分享
2015/09/07 Javascript
基于jquery实现表格无刷新分页
2016/01/07 Javascript
js中获取jsp表单中radio类型的值简单实例
2016/08/15 Javascript
js实现图片切换(动画版)
2016/12/25 Javascript
微信小程序中form 表单提交和取值实例详解
2017/04/20 Javascript
Vue.js实现在下拉列表区域外点击即可关闭下拉列表的功能(自定义下拉列表)
2017/05/30 Javascript
JavaScript实现二叉树定义、遍历及查找的方法详解
2017/12/20 Javascript
jQuery实现动态加载select下拉列表项功能示例
2018/05/31 jQuery
jQuery使用动画队列自定义动画操作示例
2018/06/16 jQuery
Django模板继承 extend标签实例代码详解
2019/05/16 Javascript
JS实现简易留言板(节点操作)
2020/03/16 Javascript
微信小程序点击item使之滚动到屏幕中间位置
2020/03/25 Javascript
[01:03:00]DOTA2上海特级锦标赛A组败者赛 EHOME VS CDEC第一局
2016/02/25 DOTA
Python实现将罗马数字转换成普通阿拉伯数字的方法
2017/04/19 Python
python更改已存在excel文件的方法
2018/05/03 Python
Python中捕获键盘的方式详解
2019/03/28 Python
使用python远程操作linux过程解析
2019/12/04 Python
对Pytorch 中的contiguous理解说明
2021/03/03 Python
今冬明春火灾防控工作方案
2014/05/29 职场文书
领导班子三严三实心得体会
2014/10/13 职场文书
普通党员整改措施
2014/10/24 职场文书
IDEA 链接Mysql数据库并执行查询操作的完整代码
2021/05/20 MySQL
Python实现拼音转换
2021/06/07 Python
索尼ICF-36收音机评测
2022/04/30 无线电