【问题标题】:如何使用 dataset.loc 中的 np.r__ 选择表中的特定列并处理字符串数据
【发布时间】:2020-02-16 09:00:39
【问题描述】:

我想对一个数据行类似于的问题进行分类

为了划分测试训练数据:

x_train, x_test, y_train, y_test = train_test_split(X, y,test_size = 0.25, random_state = 0)

Method 1:
X = dataset.loc[np.r_[0:5, 7:26]].values
y = dataset.loc[np.r_[6]].values

Method 2:
X = dataset.loc[:, ['x1', 'x2','x3','x4','x5','x6','x7','x8','x9','x10','x11','x12','x13','x14','x15','x16','x17','x18','x19','x20','x21','x22','x23','x24','x25','x26']].values
y = dataset.loc[:, ['y']].values

第一种方法遇到这个问题:

ValueError: Found input variables with inconsistent numbers of samples: [24, 1]

第二个没问题。我不喜欢写所有的专栏,但我不知道如何解决第一种方法的问题。

另外,由于数据是字符串,我遇到了这个错误:

ValueError: could not convert string to float: 'id8053'

我试图解决:

X = X.apply(lambda x: pd.factorize(x)[1])
y = y.apply(lambda x: pd.factorize(x)[0])

但我遇到了这个错误:

AttributeError: 'numpy.ndarray' object has no attribute 'apply'   

怎么了?

【问题讨论】:

  • 你为什么不用 iloc 来做 X?

标签: python-3.x pandas numpy multidimensional-array scikit-learn


【解决方案1】:

np.r_ 在您的情况下应该可以正常工作。 Method 1 错过了行。您对整数索引列进行切片(即按列的整数位置进行切片),因此您需要将 .ilocnp.r_ 用于列并指定 : 用于行

试试这个(注意np.r_ 中切片的右端已添加1,因为.iloc 忽略右端而loc 保留它

Method 1:
X = dataset.iloc[:, np.r_[0:6, 7:27]].values
y = dataset.iloc[:, np.r_[7]].values

【讨论】:

  • 谢谢,但我还有一个问题,请您看一下好吗?
  • @user10296606:您在返回 numpy array 的数据帧 dataset 的切片上调用 values。 numpy中不存在函数apply,所以报错了。
猜你喜欢
  • 2020-07-12
  • 2023-01-03
  • 2019-10-22
  • 2018-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-25
  • 1970-01-01
相关资源
最近更新 更多