python中使用dataframe二维数据转换为三维数据的几种方法

Written by

in

文章目录
  • import pandas as pd import numpy as np # 创建示例DataFrame df = pd.DataFrame({ ‘A’: range(12), ‘B’: range(12, 24), ‘C’: range(24, 36) }) # 转换为三维数组 (3, 4, 3) – 3个时间步长,4个样本,3个特征 array_3d = df.values.reshape(3, 4, 3) print(array_3d.shape) # (3, 4, 3)
  • # 假设每4行代表一个时间序列段 n_timesteps = 3 n_samples = 4 n_features = 3 # 确保DataFrame行数匹配 assert len(df) == n_timesteps * n_samples # 重塑为 (时间步长, 样本数, 特征数) reshaped = df.values.reshape(n_timesteps, n_samples, n_features)
  • # 创建包含分组列的DataFrame df_grouped = pd.DataFrame({ ‘group’: [‘A’, ‘A’, ‘A’, ‘B’, ‘B’, ‘B’, ‘C’, ‘C’, ‘C’], ‘feature1’: range(9), ‘feature2’: range(10, 19) }) # 按照分组转换为三维 groups = df_grouped[‘group’].unique() n_groups = len(groups) n_rows_per_group = 3 n_features = 2 array_3d = np.zeros((n_groups, n_rows_per_group, n_features)) for i, group in enumerate(groups): group_data = df_grouped[df_grouped[‘group’] == group][[‘feature1’, ‘feature2’]].values array_3d[i] = group_data
  • # 创建多层索引DataFrame index = pd.MultiIndex.from_product([ [‘Group1’, ‘Group2’], # 第一层 [‘Time1’, ‘Time2’, ‘Time3’], # 第二层 [‘Feature1’, ‘Feature2’] # 第三层 ], names=[‘Group’, ‘Time’, ‘Feature’]) df_multi = pd.DataFrame({‘Value’: np.random.randn(12)}, index=index) # 转换为三维数组 unstacked = df_multi.unstack(level=[‘Group’, ‘Time’]) array_3d = unstacked.values.reshape(2, 3, 2)
  • def create_sequences(data, seq_length): “””将时间序列数据转换为监督学习格式””” sequences = [] for i in range(len(data) – seq_length + 1): seq = data.iloc[i:i + seq_length].values sequences.append(seq) return np.array(sequences) # 创建序列数据 sequence_length = 3 X_3d = create_sequences(df, sequence_length) print(X_3d.shape) # (10, 3, 3) – 10个序列,每个3个时间步,每个时间步3个特征
  • # TensorFlow import tensorflow as tf tensor_3d = tf.reshape(tf.constant(df.values), (3, 4, 3)) # PyTorch import torch tensor_3d = torch.tensor(df.values).reshape(3, 4, 3)
  • 时间序列数据:(时间步长, 样本数, 特征数) 图像数据:(样本数, 高度, 宽度, 通道数) 分组数据:(组数, 组内样本数, 特征数) 自然语言处理:(批大小, 序列长度, 词向量维度)
  • 确保重塑后的总元素数量与原始DataFrame一致 考虑数据的实际含义和后续处理需求 如果是面板数据,考虑使用xarray库的DataArray来替代 import xarray as xr # 创建三维DataArray da = xr.DataArray( df.values.reshape(3, 4, 3), dims=[‘time’, ‘sample’, ‘feature’], coords={ ‘time’: pd.date_range(‘2023-01-01′, periods=3, freq=’D’), ‘sample’: range(4), ‘feature’: [‘A’, ‘B’, ‘C’] } ) 到此这篇关于python中使用dataframe二维数据转换为三维数据的几种方法的文章就介绍到这了,更多相关python 二维数据转三维数据内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: Python使用min、max函数查找二维数据矩阵中最小、最大值的方法 Python 实现使用dict 创建二维数据、DataFrame
  • 目录
    • 1.使用NumPy的reshape方法
    • 2.基于时间序列的重塑(时间步长×样本×特征)
    • 3.基于分组变量重塑
    • 4.使用Pandas的MultiIndex创建三维结构
    • 5.批量处理的时间序列(深度学习中常用)
    • 6.使用TensorFlow/PyTorch进行重塑
    • 选择重塑维度的指导原则:
    • 注意事项:

    我们可以将二维DataFrame重塑为三维数组,但需要注意DataFrame是二维的,所以我们需要指定如何将其分成多个二维切片(即第三维)。

    假设我们有一个二维DataFrame,形状为 (n_rows, n_columns),我们想将其重塑为 (a, b, c),其中 a* b * c = n_rows * n_columsn 但是,由于DataFrame是二维的,我们通常需要先将其转换为NumPy数组,然后进行重塑。

    然而,重塑为三维通常意味着我们要增加一个维度。常见的方法是将行或列分组,形成多个二维平面

    例如,假设我们有一个12行4列的DataFrame,我们可以将其重塑为(3, 4, 4)表示有3个4×4的矩阵,或者(4, 3, 4)等。

    但是,需要注意的是,重塑后的总元素数量必须与原DataFrame相同。

    步骤:

    1. 将DataFrame转换为NumPy数组。
    2. 使用reshape函数重塑数组。

    另外,我们也可以使用np.reshape或者DataFrame的values.reshape

    但是,如果我们想要按照特定的方式重塑,比如将每几行作为一个二维切片,那么我们需要先确定第三维的大小。

    例如,如果我们想要将每m行作为一个二维切片,那么第三维的大小就是 n_rows / m,每个切片是 m x n_columns。

    假设原DataFrame有n_rows行,n_columns列,我们想重塑为 (k, m, n_columns),其中 k * m = n_rows。

    下面是一个示例:

    将二维DataFrame转换为三维数组(或张量)通常需要根据数据的内在结构进行重塑。以下是几种常见的方法:

    import pandas as pd
    import numpy as np
    
    # 创建示例DataFrame
    df = pd.DataFrame({
        'A': range(12),
        'B': range(12, 24),
        'C': range(24, 36)
    })
    
    # 转换为三维数组 (3, 4, 3) - 3个时间步长,4个样本,3个特征
    array_3d = df.values.reshape(3, 4, 3)
    print(array_3d.shape)  # (3, 4, 3)
    

    # 假设每4行代表一个时间序列段
    n_timesteps = 3
    n_samples = 4
    n_features = 3
    
    # 确保DataFrame行数匹配
    assert len(df) == n_timesteps * n_samples
    
    # 重塑为 (时间步长, 样本数, 特征数)
    reshaped = df.values.reshape(n_timesteps, n_samples, n_features)
    

    # 创建包含分组列的DataFrame
    df_grouped = pd.DataFrame({
        'group': ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C'],
        'feature1': range(9),
        'feature2': range(10, 19)
    })
    
    # 按照分组转换为三维
    groups = df_grouped['group'].unique()
    n_groups = len(groups)
    n_rows_per_group = 3
    n_features = 2
    
    array_3d = np.zeros((n_groups, n_rows_per_group, n_features))
    
    for i, group in enumerate(groups):
        group_data = df_grouped[df_grouped['group'] == group][['feature1', 'feature2']].values
        array_3d[i] = group_data
    

    # 创建多层索引DataFrame
    index = pd.MultiIndex.from_product([
        ['Group1', 'Group2'],  # 第一层
        ['Time1', 'Time2', 'Time3'],  # 第二层
        ['Feature1', 'Feature2']  # 第三层
    ], names=['Group', 'Time', 'Feature'])
    
    df_multi = pd.DataFrame({'Value': np.random.randn(12)}, index=index)
    
    # 转换为三维数组
    unstacked = df_multi.unstack(level=['Group', 'Time'])
    array_3d = unstacked.values.reshape(2, 3, 2)
    

    def create_sequences(data, seq_length):
        """将时间序列数据转换为监督学习格式"""
        sequences = []
        for i in range(len(data) - seq_length + 1):
            seq = data.iloc[i:i + seq_length].values
            sequences.append(seq)
        return np.array(sequences)
    
    # 创建序列数据
    sequence_length = 3
    X_3d = create_sequences(df, sequence_length)
    print(X_3d.shape)  # (10, 3, 3) - 10个序列,每个3个时间步,每个时间步3个特征
    

    # TensorFlow
    import tensorflow as tf
    tensor_3d = tf.reshape(tf.constant(df.values), (3, 4, 3))
    
    # PyTorch
    import torch
    tensor_3d = torch.tensor(df.values).reshape(3, 4, 3)
    

    1. 时间序列数据:(时间步长, 样本数, 特征数)
    2. 图像数据:(样本数, 高度, 宽度, 通道数)
    3. 分组数据:(组数, 组内样本数, 特征数)
    4. 自然语言处理:(批大小, 序列长度, 词向量维度)

    • 确保重塑后的总元素数量与原始DataFrame一致
    • 考虑数据的实际含义和后续处理需求
    • 如果是面板数据,考虑使用xarray库的DataArray来替代
    import xarray as xr
    # 创建三维DataArray
    da = xr.DataArray(
        df.values.reshape(3, 4, 3),
        dims=['time', 'sample', 'feature'],
        coords={
            'time': pd.date_range('2023-01-01', periods=3, freq='D'),
            'sample': range(4),
            'feature': ['A', 'B', 'C']
        }
    )
    

    到此这篇关于python中使用dataframe二维数据转换为三维数据的几种方法的文章就介绍到这了,更多相关python 二维数据转三维数据内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

    您可能感兴趣的文章:

    • Python使用min、max函数查找二维数据矩阵中最小、最大值的方法
    • Python 实现使用dict 创建二维数据、DataFrame

    站内搜索