pansdasはリストデータを行または列に分割して実装する。


データ

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
参考文献
 Python Pandans list(リスト)データ列を複数行に分割する方法
10分でPandsの基礎知識を理解します。
この記事では、パンdasがリストデータを行または列に分割して実現した記事を紹介します。これに関連して、より多くのデータを分割して、以前の記事を検索したり、次の関連記事を見たりしてください。これからもよろしくお願いします。