我正在尝试使用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数组。
答案 0 :(得分:0)
您需要替换新numpy数组中原始DataFrame
中的值。您可以这样做:
遍历数据框中的列,并为其分配numpy列:
for i, col in enumerate(df.columns):
df[col] = df2[:,i]
直接分配所有列:
df[df.columns] = df2
使用旧版本的列和索引,用numpy数组创建新的DataFrame
:
df_new = pd.DataFrame(df2, columns = df.columns, index=df.index)
如果不是强制使用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数据框。