2016-02-07 5 views
1

У меня есть кадр данных, где у меня есть столбец с нан значениеПандаса объединить кадры данных

Я фильтрую их:

X_train = data[np.isnan(data[column]) == False].drop(column, 1) 
y_train = data[np.isnan(data[column]) == False][column] 
X_test = data[np.isnan(data[column]) == True].drop(column, 1) 
y_test = data[np.isnan(data[column]) == True][column] 

Затем с некоторым сложным алгоритмом я предсказать y_test значения. И затем я хочу объединить эти DataFrames с правильным порядком. Например:

X, y 
1, 1 
12, nan 
2, 3 
5, nan 
7, 34 

y_test будет иметь 2 значения. Например, после Алгоритм Построения закончился y_test == [2, 43]

Тогда я хочу, чтобы создать следующие DataFrame:

X, y 
1, 1 
12, 2 
2, 3 
5, 43 
7, 34 

ответ

1

Просто присвойте y_test недостающим значениям.

df.loc[df['y'].isnull(), 'y'] = y_test 
+0

Спасибо! Очень короткое и полезное решение –

1

Вы можете использовать

mask = np.isnan(data[column]) 
data.loc[mask, column] = [2, 43] 

присвоить значения исходного DataFrame, data:

import numpy as np 
import pandas as pd 

nan = np.nan 
data = pd.DataFrame({'X': [1, 12, 2, 5, 7], 'y': [1.0, nan, 3.0, nan, 34.0]}) 
column = 'y' 
mask = np.isnan(data[column]) 
X_train = data[~mask].drop(column, axis=1) 
y_train = data.loc[~mask, column] 
X_test = data[mask].drop(column, axis=1) 
y_test = data.loc[mask, column] 

data.loc[mask, column] = [2, 43] 
print(data) 

X y 
0 1 1 
1 12 2 
2 2 3 
3 5 43 
4 7 34 
Смежные вопросы