从Dataframe训练数据,构造可迭代训练的batch数据

最主要的方法是:

data_loader = Data.DataLoader(
    dataset=Data.TensorDataset(x, y),  # 封装进Data.TensorDataset(tensor数据1,tensor数据2, ...)类的数据,可以为任意维度
    batch_size=BATCH_SIZE,  # 每个batch的大小,即每次取数据的大小
    shuffle=True,  # 要不要打乱数据 (打乱比较好)
    num_workers=2,  # 多进程(multiprocess)来读数据
)

案例

import torch
import torch.utils.data as Data
import pandas as pd
import numpy as np


def get_data():
    """生成 特征 X 与 label Y """

    def get_tensor_from_pd(dataframe_series):
        return torch.tensor(data=dataframe_series.values)

    df = pd.DataFrame(data=np.random.randint(0, 10, size=(20, 5)))
    y = pd.Series(np.random.randint(0, 2, 20))
    return get_tensor_from_pd(df), get_tensor_from_pd(y)


if __name__ == '__main__':  # 注意:如果loader中设置了num_workers!=0,即采用多进程来处理数据,运行含loader的操作必须在‘__main__’的范围内
    torch.manual_seed(1)  # 确定随机种子
    # 生成数据集
    x, y = get_data()
    BATCH_SIZE = 6  # 每个batch的大小,即每次取出多少个数据

    # 把 dataset 放入 DataLoader
    data_loader = Data.DataLoader(
        dataset=Data.TensorDataset(x, y),  # 封装进Data.TensorDataset()类的数据,可以为任意维度
        batch_size=BATCH_SIZE,  # 每块的大小
        shuffle=True,  # 要不要打乱数据 (打乱比较好)
        num_workers=2,  # 多进程(multiprocess)来读数据
    )

    # 进行3轮训练(每次拿全部的数据进行训练)
    for epoch in range(3):
        # 在一轮中迭代获取每个batch(把全部的数据分成小块一块块的训练)
        for step, (batch_x, batch_y) in enumerate(data_loader):
            # 把 batch 数据打印出来
            print("-----------------==================================================-----------------")
            print('迭代次数Epoch: ', epoch, '| batch次数: ', step)
            print('batch x值: ', batch_x, '| batch y值: ', batch_y)
pandas 中,可以使用以下方法对 DataFrame 进行历遍迭代: 1. `iterrows()`: 遍历 DataFrame 的每一行,返回每一行的 index 和 row 数据。 2. `itertuples()`: 遍历 DataFrame 的每一行,返回一个命名元组,元组中的每个元素对应 DataFrame 中的每一列,速度比 `iterrows()` 快。 3. `iteritems()`: 遍历 DataFrame 的每一列,返回每一列的列名和列数据。 以下是对 DataFrame 进行历遍迭代的示例代码: ```python import pandas as pd # 创建一个 DataFrame df = pd.DataFrame({ 'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9] }) # 使用 iterrows() 遍历 DataFrame 的每一行 for index, row in df.iterrows(): print(f"index: {index}, row: {row}") # 使用 itertuples() 遍历 DataFrame 的每一行 for row in df.itertuples(): print(row) # 使用 iteritems() 遍历 DataFrame 的每一列 for column_name, column_data in df.iteritems(): print(f"column name: {column_name}, column data: {column_data}") ``` 输出结果: ``` index: 0, row: A 1 B 4 C 7 Name: 0, dtype: int64 index: 1, row: A 2 B 5 C 8 Name: 1, dtype: int64 index: 2, row: A 3 B 6 C 9 Name: 2, dtype: int64 Pandas(Index=0, A=1, B=4, C=7) Pandas(Index=1, A=2, B=5, C=8) Pandas(Index=2, A=3, B=6, C=9) column name: A, column data: 0 1 1 2 2 3 Name: A, dtype: int64 column name: B, column data: 0 4 1 5 2 6 Name: B, dtype: int64 column name: C, column data: 0 7 1 8 2 9 Name: C, dtype: int64 ``` 以上三种方法各有优缺点,根据具体情况选择使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呆萌的代Ma

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值