【问题标题】:How can I maintain the same pandas DataFrame after using sklearn imputer?使用 sklearn imputer 后如何维护相同的 pandas DataFrame?
【发布时间】:2019-05-09 23:37:28
【问题描述】:

我正在尝试使用 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 数组。

【问题讨论】:

    标签: python pandas scikit-learn


    【解决方案1】:

    您需要从新的 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())
      

    【讨论】:

      【解决方案2】:

      一个简单的方法 ->

      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 数据框。

      【讨论】:

        猜你喜欢
        • 2019-10-17
        • 2016-07-27
        • 2016-02-09
        • 2016-11-04
        • 2019-08-03
        • 2018-11-12
        • 2019-05-23
        • 2020-01-02
        • 2019-06-15
        相关资源
        最近更新 更多