簡體   English   中英

選擇熊貓數據幀的切片時保留索引

[英]Preserving the index when selecting a slice of a pandas dataframe

因此,我正在使用 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可以訪問.values的底層 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]更改為正確的列,以便索引將包含在切片中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM