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中类型关系和继承关系实例详解
May 25 Python
实例探究Python以并发方式编写高性能端口扫描器的方法
Jun 14 Python
TensorFlow在MAC环境下的安装及环境搭建
Nov 14 Python
Python numpy实现数组合并实例(vstack,hstack)
Jan 09 Python
python实现远程通过网络邮件控制计算机重启或关机
Feb 22 Python
Python3.遍历某文件夹提取特定文件名的实例
Apr 26 Python
Python单元测试实例详解
May 25 Python
浅谈Series和DataFrame中的sort_index方法
Jun 07 Python
python扫描线填充算法详解
Feb 19 Python
pycharm 激活码及使用方式的详细教程
May 12 Python
python删除某个目录文件夹的方法
May 26 Python
Django+Celery实现定时任务的示例
Jun 23 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
mysql4.1以上版本连接时出现Client does not support authentication protocol问题解决办法
2007/03/15 PHP
php强制下载类型的实现代码
2011/04/21 PHP
关于php连接mssql:pdo odbc sql server
2011/07/20 PHP
php使用str_replace实现输入框回车替换br的方法
2014/11/24 PHP
在html文件中也可以执行php语句的方法
2015/04/09 PHP
Laravel 创建指定表 migrate的例子
2019/10/09 PHP
Thinkphp集成抖音SDK的实现方法
2020/04/28 PHP
对联广告js flash激活
2006/10/19 Javascript
javascript中的startWith和endWith的几种实现方法
2013/05/07 Javascript
js 遍历json返回的map内容示例代码
2013/10/29 Javascript
JavaScript 学习笔记之操作符
2015/01/14 Javascript
运行Node.js的IIS扩展iisnode安装配置笔记
2015/03/02 Javascript
jquery实现标签上移、下移、置顶
2015/04/26 Javascript
jquery计算出left和top,让一个div水平垂直居中的简单实例
2016/07/13 Javascript
jQuery DateTimePicker 日期和时间插件示例
2017/01/22 Javascript
Vue.js学习记录之在元素与template中使用v-if指令实例
2017/06/27 Javascript
基于Vue生产环境部署详解
2017/09/15 Javascript
vue实现点击展开点击收起效果
2018/04/27 Javascript
Angular事件之不同组件间传递数据的方法
2018/11/15 Javascript
webpack3里使用uglifyjs压缩js时打包报错的解决
2018/12/13 Javascript
详解@Vue/Cli 3 Invalid Host header 错误解决办法
2019/01/02 Javascript
JavaScript偏函数与柯里化实例详解
2019/03/27 Javascript
基于Vue的商品主图放大镜方案详解
2019/09/19 Javascript
Vue监听滚动实现锚点定位(双向)示例
2019/11/13 Javascript
[47:04]EG vs RNG 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
Python实现的一个自动售饮料程序代码分享
2014/08/25 Python
python 信息同时输出到控制台与文件的实例讲解
2018/05/11 Python
python自带tkinter库实现棋盘覆盖图形界面
2019/07/17 Python
Canvas制作旋转的太极的示例
2018/03/09 HTML / CSS
俄罗斯EPL钻石珠宝店:ЭПЛ
2019/10/22 全球购物
工程总经理工作职责
2013/12/09 职场文书
春节联欢会主持词
2014/03/24 职场文书
读《庄子》有感:美而不自知
2019/11/06 职场文书
python3实现无权最短路径的方法
2021/05/12 Python
如何利用opencv判断两张图片是否相同详解
2021/07/07 Python
详解ZABBIX监控ESXI主机的问题
2022/06/21 Servers