将 Pandas 数据帧转换为 PyTorch 张量?
Convert Pandas dataframe to PyTorch tensor?
我想在 pandas 数据帧 df
上使用 PyTorch 训练一个简单的神经网络 df
。
其中一列名为"Target"
,它是网络的目标变量。如何使用此数据框作为 PyTorch 网络的输入?
我试过了,但没用:
import pandas as pd
import torch.utils.data as data_utils
target = pd.DataFrame(df['Target'])
train = data_utils.TensorDataset(df, target)
train_loader = data_utils.DataLoader(train, batch_size=10, shuffle=True)
我指的是标题中的问题,因为您没有在文本中真正指定任何其他内容,所以只需将 DataFrame 转换为 PyTorch 张量即可。
没有关于您的数据的信息,我在这里只是将浮点值作为示例目标。
将 Pandas 数据帧转换为 PyTorch 张量?
import pandas as pd
import torch
import random
# creating dummy targets (float values)
targets_data = [random.random() for i in range(10)]
# creating DataFrame from targets_data
targets_df = pd.DataFrame(data=targets_data)
targets_df.columns = ['targets']
# creating tensor from targets_df
torch_tensor = torch.tensor(targets_df['targets'].values)
# printing out result
print(torch_tensor)
输出:
tensor([ 0.5827, 0.5881, 0.1543, 0.6815, 0.9400, 0.8683, 0.4289,
0.5940, 0.6438, 0.7514], dtype=torch.float64)
使用 Pytorch 0.4.0 测试。
希望这对您有所帮助,如果您有任何其他问题 - 请尽管提问。 :)
也许试试看它是否可以解决您的问题(根据您的示例代码)?
train_target = torch.tensor(train['Target'].values.astype(np.float32))
train = torch.tensor(train.drop('Target', axis = 1).values.astype(np.float32))
train_tensor = data_utils.TensorDataset(train, train_target)
train_loader = data_utils.DataLoader(dataset = train_tensor, batch_size = batch_size, shuffle = True)
只需转换pandas dataframe -> numpy array -> pytorch tensor
。下面描述了一个例子:
import pandas as pd
import numpy as np
import torch
df = pd.read_csv('train.csv')
target = pd.DataFrame(df['target'])
del df['target']
train = data_utils.TensorDataset(torch.Tensor(np.array(df)), torch.Tensor(np.array(target)))
train_loader = data_utils.DataLoader(train, batch_size = 10, shuffle = True)
希望这将帮助您使用 pytorch 创建自己的数据集(与最新版本的 pytorch 兼容)。
您可以使用以下函数将任何数据帧或 pandas 系列转换为 pytorch 张量
import pandas as pd
import torch
# determine the supported device
def get_device():
if torch.cuda.is_available():
device = torch.device('cuda:0')
else:
device = torch.device('cpu') # don't have GPU
return device
# convert a df to tensor to be used in pytorch
def df_to_tensor(df):
device = get_device()
return torch.from_numpy(df.values).float().to(device)
df_tensor = df_to_tensor(df)
series_tensor = df_to_tensor(series)
您可以将 df.values
属性(一个 numpy 数组)直接传递给 Dataset 构造函数:
import torch.utils.data as data_utils
# Creating np arrays
target = df['Target'].values
features = df.drop('Target', axis=1).values
# Passing to DataLoader
train = data_utils.TensorDataset(features, target)
train_loader = data_utils.DataLoader(train, batch_size=10, shuffle=True)
注意:你的特征(df
)也包含目标变量(df['Target']
)即你的网络是'cheating',因为它可以在输入中看到目标。您需要从特征集中删除此列。
#This works for me
target = torch.tensor(df['Targets'].values)
features = torch.tensor(df.drop('Targets', axis = 1).values)
train = data_utils.TensorDataset(features, target)
train_loader = data_utils.DataLoader(train, batch_size=10, shuffle=True)
将数据帧转换为 pytorch 张量:
[你可以用它来处理任何 df 以将其转换为 pytorch 张量]
步骤:
- convert df to numpy using df.to_numpy() or df.to_numpy().astype(np.float32) 改变每个numpy数组的数据类型为float32
- 使用 torch.from_numpy(df) 方法将 numpy 转换为张量
示例:
tensor_ = torch.from_numpy(df.to_numpy().astype(np.float32))
我想在 pandas 数据帧 df
上使用 PyTorch 训练一个简单的神经网络 df
。
其中一列名为"Target"
,它是网络的目标变量。如何使用此数据框作为 PyTorch 网络的输入?
我试过了,但没用:
import pandas as pd
import torch.utils.data as data_utils
target = pd.DataFrame(df['Target'])
train = data_utils.TensorDataset(df, target)
train_loader = data_utils.DataLoader(train, batch_size=10, shuffle=True)
我指的是标题中的问题,因为您没有在文本中真正指定任何其他内容,所以只需将 DataFrame 转换为 PyTorch 张量即可。
没有关于您的数据的信息,我在这里只是将浮点值作为示例目标。
将 Pandas 数据帧转换为 PyTorch 张量?
import pandas as pd
import torch
import random
# creating dummy targets (float values)
targets_data = [random.random() for i in range(10)]
# creating DataFrame from targets_data
targets_df = pd.DataFrame(data=targets_data)
targets_df.columns = ['targets']
# creating tensor from targets_df
torch_tensor = torch.tensor(targets_df['targets'].values)
# printing out result
print(torch_tensor)
输出:
tensor([ 0.5827, 0.5881, 0.1543, 0.6815, 0.9400, 0.8683, 0.4289,
0.5940, 0.6438, 0.7514], dtype=torch.float64)
使用 Pytorch 0.4.0 测试。
希望这对您有所帮助,如果您有任何其他问题 - 请尽管提问。 :)
也许试试看它是否可以解决您的问题(根据您的示例代码)?
train_target = torch.tensor(train['Target'].values.astype(np.float32))
train = torch.tensor(train.drop('Target', axis = 1).values.astype(np.float32))
train_tensor = data_utils.TensorDataset(train, train_target)
train_loader = data_utils.DataLoader(dataset = train_tensor, batch_size = batch_size, shuffle = True)
只需转换pandas dataframe -> numpy array -> pytorch tensor
。下面描述了一个例子:
import pandas as pd
import numpy as np
import torch
df = pd.read_csv('train.csv')
target = pd.DataFrame(df['target'])
del df['target']
train = data_utils.TensorDataset(torch.Tensor(np.array(df)), torch.Tensor(np.array(target)))
train_loader = data_utils.DataLoader(train, batch_size = 10, shuffle = True)
希望这将帮助您使用 pytorch 创建自己的数据集(与最新版本的 pytorch 兼容)。
您可以使用以下函数将任何数据帧或 pandas 系列转换为 pytorch 张量
import pandas as pd
import torch
# determine the supported device
def get_device():
if torch.cuda.is_available():
device = torch.device('cuda:0')
else:
device = torch.device('cpu') # don't have GPU
return device
# convert a df to tensor to be used in pytorch
def df_to_tensor(df):
device = get_device()
return torch.from_numpy(df.values).float().to(device)
df_tensor = df_to_tensor(df)
series_tensor = df_to_tensor(series)
您可以将 df.values
属性(一个 numpy 数组)直接传递给 Dataset 构造函数:
import torch.utils.data as data_utils
# Creating np arrays
target = df['Target'].values
features = df.drop('Target', axis=1).values
# Passing to DataLoader
train = data_utils.TensorDataset(features, target)
train_loader = data_utils.DataLoader(train, batch_size=10, shuffle=True)
注意:你的特征(df
)也包含目标变量(df['Target']
)即你的网络是'cheating',因为它可以在输入中看到目标。您需要从特征集中删除此列。
#This works for me
target = torch.tensor(df['Targets'].values)
features = torch.tensor(df.drop('Targets', axis = 1).values)
train = data_utils.TensorDataset(features, target)
train_loader = data_utils.DataLoader(train, batch_size=10, shuffle=True)
将数据帧转换为 pytorch 张量: [你可以用它来处理任何 df 以将其转换为 pytorch 张量]
步骤:
- convert df to numpy using df.to_numpy() or df.to_numpy().astype(np.float32) 改变每个numpy数组的数据类型为float32
- 使用 torch.from_numpy(df) 方法将 numpy 转换为张量
示例:
tensor_ = torch.from_numpy(df.to_numpy().astype(np.float32))