gpt4 book ai didi

python - genfromtxt 创建元组的一维数组而不是二维数组

转载 作者:太空宇宙 更新时间:2023-11-04 01:07:36 25 4
gpt4 key购买 nike

我正在尝试使用 scikit-learn 进行一些分类。但是,我在开始工作和导入数据时遇到了麻烦。

我正在处理这些数据:Adult Data Set .

我是 numpy 和 scikit-learn 的新手,所以我开始关注 this tutorial ,它使用 Wine dataset .

我遇到的问题是数据是作为元组的一维数组而不是二维数组导入的。还有丢失的数据,由 ? 指示。

我的数据集并不完全是数字的。有很多字符串。我读了genfromtxt doc ,其中包含如何处理混合类型数据集的示例。 (可能有比我在下面使用的更好的方法来解决这个问题吗?)

这是我的代码:

import numpy as np

all_data = np.genfromtxt(open("./adult.data","r"), dtype=[
('age', 'i4'),
('workclass', 'S16'),
('fnlwgt', 'i8'),
('education', 'S12'),
('education_num', 'i4'),
('marital_status', 'S22'),
('occupation', 'S17'),
('relationship', 'S14'),
('race', 'S18'),
('sex', 'S6'),
('capital_gain', 'i8'),
('capital_loss', 'i8'),
('hours_per_week', 'i4'),
('native_country', 'S26'),
('income', 'S5')
],
delimiter=",", autostrip=True,
missing_values=('?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?'))

# load class labels from column 15
y_adult_labels = all_data['income']

# load the 14 features
X_adult = all_data[:][0:-1]

这是创建一个元组的一维数组,其中每个元组是原始 CSV 数据文件中的一行。

为什么这不是创建一个二维数组? (对于初学者,像这样的 all_data[:,1:] 会给出一个 IndexError: too many indices for array。)

我最终想:

  • 将字符串数据映射到数值(不知何故......也许在 genfromtxt 调用中使用 converters
  • 处理二维数组(例如 PCA)

最佳答案

二维数组必须在所有单元格中具有相同类型的内容。但是根据您自己的规范(dtype),您正在加载数字和字符串的混合。

这是一种不同类型的二维数组,一种结构化数组。您按数字索引“行”,按名称索引“列”,例如all_data['收入']。这些“元组”(不是真正的元组,但它们以这种方式显示)是相当于二维数组行的结构化数组。

如果您确实必须按编号访问字段,则从 dtype.names 列表中索引名称。

阅读结构化(有时称为记录)数组。

为什么 genfromtxt 返回一维数组的问题已经被问过很多次了。

至于向纯数值数据的转换,我认为你将不得不逐列(字段)地工作。制作另一个数组 newdata=np.empty((n,15),dtype=int)。采用 all_data['workclass'],将字符串映射到数字,并将它们分配给 newdata[:,1]=... 等。没有魔法或捷径。

关于python - genfromtxt 创建元组的一维数组而不是二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29597295/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com