【问题标题】:Loading SKLearn cancer dataset into Pandas DataFrame将 SKLearn 癌症数据集加载到 Pandas DataFrame 中
【发布时间】:2017-06-03 04:58:09
【问题描述】:

我正在尝试根据键(target_names、target 和 DESCR)加载 sklearn.dataset,但缺少一列。我尝试了各种方法来包含最后一列,但有错误。

 import numpy as np
 import pandas as pd
 from sklearn.datasets import load_breast_cancer

 cancer = load_breast_cancer()
 print cancer.keys()

键是 ['target_names', 'data', 'target', 'DESCR', 'feature_names']

 data = pd.DataFrame(cancer.data, columns=[cancer.feature_names])
 print data.describe()

使用上面的代码,当我需要 31 列时,它只返回 30 列。将 scikit-learn 数据集加载到 pandas DataFrame 的最佳方式是什么。

【问题讨论】:

  • 你能解释一下为什么应该有 31 列吗?如果你使用cancer.data.shape或者勾选the dataset description,数据集中似乎只有30列。你错过了哪一栏?
  • 我缺少 dataset.keys() 中的 target/target_names 列,因为它尚未加载到数据框中。

标签: python numpy scikit-learn


【解决方案1】:

创建包含特征和目标变量的数据框的另一种选择是:

import pandas as pd
import numpy as np
from sklearn.datasets import load_breast_cancer

cancer = load_breast_cancer()
df = pd.DataFrame(np.c_[cancer['data'], cancer['target']],
                  columns= np.append(cancer['feature_names'], ['target']))

【讨论】:

    【解决方案2】:

    如果您想拥有一个target 列,则需要添加它,因为它不在cancer.data 中。 cancer.target 具有带有 01 的列,cancer.target_names 具有标签。我希望以下是您想要的:

    import numpy as np
    import pandas as pd
    from sklearn.datasets import load_breast_cancer
    
    cancer = load_breast_cancer()
    print cancer.keys()
    
    data = pd.DataFrame(cancer.data, columns=[cancer.feature_names])
    print data.describe()
    
    data = data.assign(target=pd.Series(cancer.target))
    print data.describe()
    
    # In case you want labels instead of numbers.
    data.replace(to_replace={'target': {0: cancer.target_names[0]}}, inplace=True)
    data.replace(to_replace={'target': {1: cancer.target_names[1]}}, inplace=True)
    print data.shape # data.describe() won't show the "target" column here because I converted its value to string.
    

    【讨论】:

    • 是的,我刚刚发现,data['Target'] = pd.Series(data=cancer.target, index=data.index) 也可以。谢谢。
    【解决方案3】:

    这也有效,也使用 pd.Series。

    import numpy as np
    import pandas as pd
    from sklearn.datasets import load_breast_cancer
    
    cancer = load_breast_cancer()
    print cancer.keys()
    
    data = pd.DataFrame(cancer.data, columns=[cancer.feature_names])
    data['Target'] = pd.Series(data=cancer.target, index=data.index)
    
    print data.keys()
    print data.shape
    

    【讨论】:

      【解决方案4】:

      仅缺少目标列,因此您只需添加一个即可。

      df =  pd.DataFrame(cancer.data, columns=[cancer.feature_names])
      df['target'] = cancer.target
      

      【讨论】:

        【解决方案5】:

        可以使用 map() 优雅地处理映射目标名称:

        data["target"] = pd.Categorical(pd.Series(cancer.target).map(lambda x: cancer.target_names[x]))
        

        【讨论】:

          【解决方案6】:

          从 scikit-learn 0.23 开始,您可以执行以下操作来获取包含目标列的 DataFrame。

          df = load_breast_cancer(as_frame=True)
          df.frame
          

          【讨论】:

            猜你喜欢
            • 2023-03-17
            • 2013-07-22
            • 2020-01-16
            • 2020-12-06
            • 2020-10-07
            • 2013-10-06
            • 1970-01-01
            • 2017-11-16
            相关资源
            最近更新 更多