python拆分list_pandas将list数据拆分成行或列的实现

本文介绍了如何使用Python的Pandas库将含有list数据的DataFrame拆分为行或列。提供了split_row和split_col两个函数的实现,分别用于按行和按列拆分数据,并给出了批量处理和处理混合数据类型的示例。
摘要由CSDN通过智能技术生成

数据

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

拆分成行

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')

拆分成列

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. 批量处理+不要原列

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数据

转成这样:

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

参考文献

到此这篇关于pandas将list数据拆分成行或列的实现的文章就介绍到这了,更多相关pandas list数据拆分内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值