【问题标题】:How do I prevent getting nan values after binning with KBinsDiscretizer?使用 KBinsDiscretizer 分箱后如何防止获取 nan 值?
【发布时间】:2020-12-05 09:51:56
【问题描述】:

在分箱之前,我已经处理了列中的nan值。

sales_df['built'].unique()

array([1955., 1951., 1933., 1965., 1987., 2001., 1995., 1963., 1960., 2003., 1942., 1977., 1900., 1979., 1994., 1916., 1921., 1969., 1947., 1968., 1985., 1941., 1915., 1909., 1948., 2005., 1929., 1981., 1930., 1904., 1996., 2000., 1984., 2014., 1922., 1959., 1966., 1953., 1950., 1927., 2008., 1991., 1954., 1925., 1989., 1973., 1972., 1986., 1956., 2002., 1992., 1964., 1952., 1961., 2006., 1988., 1939., 1946., 1967., 1975., 1910., 1983., 1978., 1905., 1971., 2010., 1924., 1990., 1914., 1926., 2004., 1962., 1923., 2007., 1976., 1949., 1999., 1980., 1901., 1993., 1920., 1997., 1943., 1957., 1940., 1918., 1928., 1974., 1911., 1936., 1937., 1982., 1908., 1931., 1998., 2013., 1907., 1958., 2012., 1912., 2011., 1917., 1932., 1944., 1902., 2009., 1903., 1970., 2015., 1934., 1938., 1913., 1919., 1906., 1945., 1935.])

这样使用 KBinsDiscretizer 之后..

# use kbinsdiscretizer
from sklearn.preprocessing import KBinsDiscretizer

def kbin(variables, encoding):
    bin_df = sales_df[variables].copy()
    discretizer = KBinsDiscretizer(n_bins=8,
                                   encode=encoding,
                                   strategy='quantile')
    sales_df[variables] = pd.DataFrame(discretizer.fit_transform(bin_df), columns=bin_df.columns)
    
ordinal_bin = ['built', 'renovation', 'years_from_last_renovation']
ordinal_binned = kbin(ordinal_bin, 'ordinal')

我最终在列中得到了 nan 值。

sales_df['built'].unique()

数组([ 2., 1., 3., 5., 6., 0., 4., 7., nan])

【问题讨论】:

    标签: pandas scikit-learn data-science sklearn-pandas binning


    【解决方案1】:

    原来我忘了重置原始 DataFrame 的索引。当我使用 KBinsDiscretizer 的结果创建一个新的 DataFrame 时,行索引不匹配,因此在发生这种情况的地方创建了 nan 值。

    在运行 KBinsDiscretizer 之前只是一个简单的修复

    sales_df.reset_index(drop=True)
    

    【讨论】:

      猜你喜欢
      • 2020-11-27
      • 2023-01-17
      • 1970-01-01
      • 2020-08-10
      • 2016-02-18
      • 2017-08-23
      • 1970-01-01
      • 1970-01-01
      • 2020-04-10
      相关资源
      最近更新 更多