【问题标题】:How to get column names from my numpy array?如何从我的 numpy 数组中获取列名?
【发布时间】:2019-02-08 11:43:45
【问题描述】:

我使用了here 所示的基于 L1 的特征选择,以便从 pandas DataFrame X 中选择合适的列。

from sklearn.svm import LinearSVC
from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectFromModel

iris = load_iris()
X, y = iris.data, iris.target

lsvc = LinearSVC(C=0.01, penalty="l1", dual=False).fit(X, y)
model = SelectFromModel(lsvc, prefit=True)
X_new = model.transform(X)

但是我不清楚如何获取列名。由于X_newnumpy 数组,我尝试了这个:

X_new.dtype.names

但它什么也没返回。那么,我如何才能真正了解选择了哪些列?

【问题讨论】:

  • @Zero:在我的情况下,原始 X 和 X_new 中的特征数量不相等。我看到了这个解决方案,但我不明白什么是“feature_selector.get_support”:X_selected_df = pd.DataFrame(X_new, columns=[X.columns[i] for i in range(len(X.columns)) if feature_selector.get_support()[i]])
  • 这是我试过的:X_selected_df = pd.DataFrame(X_new, columns=[X.columns[i] for i in range(len(X.columns)) if SelectFromModel.get_support()[i]]),但得到了AttributeError: 'numpy.ndarray' object has no attribute 'columns'
  • 您使用的是 csv 数据文件吗?
  • 不,我正在使用iris = load_iris()。没有 csv。

标签: python pandas numpy scikit-learn


【解决方案1】:

将数据转换为 csv 文件后,您需要使用 pd.read_csv 将该文件放入数据框。

然后您可以使用columns 属性访问列。

此外,您可以使用to_list 属性将列作为列表获取。

或者,您可以使用 Ahmad 的方法:

import re

f = open('f.csv','r')

alllines = f.readlines()
columns = re.sub(' +',' ',alllines[0]) #delete extra space in one line
columns = columns.strip().split(',') #split using space

print(columns)

编辑:OP 通过使用 model.get_support 而不是 SelectFromModel.get_support 解决了这个问题

【讨论】:

    猜你喜欢
    • 2017-05-12
    • 2018-05-15
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 2019-09-23
    • 2019-11-07
    • 1970-01-01
    相关资源
    最近更新 更多