gpt4 book ai didi

python - 选择 pandas 数据帧的一部分时保留索引

转载 作者:太空宇宙 更新时间:2023-11-04 04:23:12 26 4
gpt4 key购买 nike

所以我正在使用 sklearn 创建我的训练和测试集,用于多元线性回归模型。

我的数据集包含 182 个特征,如下所示;

id      feature1 feature2  ....  feature182 Target
D24352 145 8 7 1
G09340 10 24 0 0
E40988 6 42 8 1
H42093 238 234 2 1
F32093 12 72 1 0

然后我有以下代码;

import pandas as pd

dataset = pd.read_csv('C:\\mylocation\\myfile.csv')
dataset0 = dataset.set_index('t1.id')
dataset2 = pd.get_dummies(dataset0)
y = dataset0.iloc[:, 31:32].values
dataset2.pop('Target')
X = dataset2.iloc[:, :180].values

然而,一旦我使用 dataframe.iloc,我就失去了我的索引(我已将其设置为我的 ID)。我想保留这些,因为在执行以下步骤时,我目前无法判断结果中的哪些记录与原始 dataset 中的哪些记录相关;

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(X_train, y_train)

y_pred = regressor.predict(X_test)

最佳答案

看起来您的数据存储为 object 类型。您应该将其转换为 float64(假设您的所有数据都是数字类型。否则只转换那些您想要作为数字类型的行)。由于事实证明您的索引是字符串类型,因此您需要在设置索引(并生成虚拟对象)后设置数据框的dtype。再次假设您的其余数据是数字类型:

dataset = pd.read_csv('C:\\mylocation\\myfile.csv')
dataset0 = dataset.set_index('t1.id')
dataset2 = pd.get_dummies(dataset0)
dataset0 = dataset0.astype(np.float64) # add this line to explicitly set the dtype

现在您应该能够在切片 DataFrame 时省略 values:

y = dataset0.iloc[:, 31:32]
dataset2.pop('Target')
X = dataset2.iloc[:, :180]

使用 .values 您可以访问 DataFrame 的底层 numpy 数组。这些没有索引列。由于 sklearn 在大多数情况下与 pandas 兼容,您只需将 pandas DataFrame 传递给 sklearn。

如果这不起作用,您仍然可以将 reset_index 应用于您的 DataFrame。这会将索引添加为新列,在将训练数据传递给 sklearn 时,您必须删除该列:

dataset0.reset_index(inplace=True)
dataset2.reset_index(inplace=True)
y = dataset0.iloc[:, 31:32].values
dataset2.pop('Target')
X = dataset2.iloc[:, :180].values

from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size = 0.2, random_state = 0)

from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(X_train.drop('index', axis=1), y_train.drop('index', axis=1))

y_pred = regressor.predict(X_test.drop('index', axis=1))

在这种情况下,您仍然需要将切片 [:, 31:32][:, :180] 更改为正确的列,以便索引将包含在切片中。

关于python - 选择 pandas 数据帧的一部分时保留索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54077024/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com