使用sklearn imputer后如何维护相同的pandas DataFrame?

时间:2019-05-09 15:17:13

标签: python pandas scikit-learn

我正在尝试使用Imputer替换我所有的NaN值。但是,sklearn imputer将我的数据更改为一个numpy数组。如何在不将数据更改为numpy数组的情况下使其替换所有NaN值?

from sklearn.preprocessing import Imputer
import pandas as pd

df = pd.read_csv('my_data')

imp = Imputer(strategy='median')
imp.fit(df)
df = imp.transform(df)

这样做之后,当我检查数据时,我没有得到以前格式化好的数据,而是一个numpy数组。

2 个答案:

答案 0 :(得分:0)

您需要替换新numpy数组中原始DataFrame中的值。您可以这样做:

  1. 遍历数据框中的列,并为其分配numpy列:

    for i, col in enumerate(df.columns):
        df[col] = df2[:,i]
    
  2. 直接分配所有列:

    df[df.columns] = df2
    
  3. 使用旧版本的列和索引,用numpy数组创建新的DataFrame

    df_new = pd.DataFrame(df2, columns = df.columns, index=df.index)
    
  4. 如果不是强制使用Imputer,则直接使用pandas.fillna() method

    df = df.fillna(df.median())
    

答案 1 :(得分:0)

一种简单的方法->

df = pd.read_csv('my_data')
col = ['a','b','c','d']  #save your columns in an array
imp = Imputer(strategy='median')
imp.fit(df)
df = imp.transform(df)
df = pd.Dataframe(df,columns=col) # COnvert it back to dataframe. 

这会将数组转换为Pandas数据框。