【问题标题】:How to convert dataframe to 1D array ?如何将数据帧转换为一维数组?
【发布时间】:2017-09-15 18:51:55
【问题描述】:

首先道歉。我对 pandas、scikit learn 和 python 很陌生。所以我确信我在做一些愚蠢的事情。让我介绍一下背景。

我正在尝试从 scikit learn (python) 运行 KNeighborsClassifier 以下是我的策略

#Reading the Training set
data = pd.read_csv('Path_TO_File\\Train_Set.csv', sep=',') # reading CSV File
X = data[['Attribute 1','Attribute 2']] 
y = data['Target_Column'] # the output is a Dataframe of single column with many rows
neigh = KNeighborsClassifier(n_neighbors=3)
neigh.fit(X,y) 

接下来我尝试读取测试数据

test = pd.read_csv('PATH_TO_FILE\\Test.csv', sep=',')
t = test[['Attribute 1','Attribute 2']] 
pred = neigh.predict(t)
actual = test['Target_Column']

接下来我尝试通过以下抛出错误的函数来检查准确性。

accuracy=neigh.score(actual,pred)

错误:ValueError:无法将字符串转换为浮点数:N

我检查了实际和预测,它们具有以下数据类型和内容

actual
Out[161]: 
    Target_Column
0             Y
1             N
:

[614 rows x 1 columns]

pred
Out[162]: 
array(['Y', 'N', .....'N'], dtype=object)

注意:pred 有 614 个值。

我尝试将“实际”变量转换为一维数组我可能能够执行该函数,但是我没有成功。

我认为我需要做以下两件事,但是无法做到(在谷歌搜索之后)

1) 将实际转换为一维数组 2) 由于 pred 有 614 列,因此对 1Dimen 数组进行转置。

请告诉我如何更正该功能。

提前致谢! 拉杰

【问题讨论】:

  • 不,你必须将 Y 和 N 转换为 1 和 0
  • 请注意:我也试过 neigh.score(y,actual) 但出现以下错误:ValueError: could not convert string to float: N

标签: python pandas dataframe scikit-learn


【解决方案1】:

感谢 Vivek 和 Thornhale

确实我做错了两件事。

  1. 正如你们所指出的,我应该使用 1、0 而不是 Y, N.
  2. 我给函数分数提供了错误的参数。它应该是 accuracy=neigh.score(t, actual) ,其中 t 是测试特征集, 实际是测试标签信息。

【讨论】:

    【解决方案2】:

    您可以将执行“test[COLUMN_NAME]”时得到的系列转换为这样的数组:

    actual = np.array(test['Target_Column'])
    

    然后要重塑一个 np 数组,您可以使用以下命令:

    actual.reshape(1, 612) # <- Could be the other way around as well.
    

    但您的主要问题是您的系列需要是布尔值(如 0,1)。

    【讨论】:

      猜你喜欢
      • 2021-04-04
      • 1970-01-01
      • 1970-01-01
      • 2011-07-05
      • 2011-08-24
      • 2015-07-16
      • 2019-04-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多