【问题标题】:Python: Extract only some attributes from a csv file to a numpy arrayPython:仅从 csv 文件中提取一些属性到 numpy 数组
【发布时间】:2018-06-26 19:11:57
【问题描述】:

我正在尝试开发一个从 csv 文件读取其输入的神经网络。我用这个作为教程: https://machinelearningmastery.com/multi-class-classification-tutorial-keras-deep-learning-library/

我了解输入是如何存储在 X 中的

X = dataset[:,0:4].astype(float)

问题是我要使用的数据集每个条目有超过 100 个属性(不像这里只有 4 个)。我已经弄清楚我想将其中哪些用作输入,但我找不到创建与示例中格式相同的 X 的方法。我尝试了 numpy.vstack 但没有得到想要的结果。

谁能给我一个示例,说明如何创建仅包含指定属性的 X?

【问题讨论】:

  • 你试过usecols参数吗?
  • 没有。你能帮忙吗?
  • 我使用了 X = numpy.loadtxt("IrisDataset.csv", delimiter=',', usecols=(0, 1, 2, 3))
  • 格式现在可以了,但我仍然有数据类型的问题。因为我要使用的属性是不同的数据类型(无符号、布尔值、字符串、有符号)。我不太确定如何使用 dtype 参数。
  • 您可能会发现genfromtxt 在这种情况下更易于使用。如果它不能将项目变成默认的float,它不会窒息。 dtype=None 告诉它为每一列推断出适当的 dtype。我建议先尝试一下,然后查看生成的数组(尤其是它的 dtype)。然后将其用作改进字段 dtypes 的模型。

标签: python csv numpy attributes selection


【解决方案1】:

一个常见的过程是使用 pandas,它允许通过 pandas.DataFrame.infer_objects 后跟 pandas.DataFrame.values 进行 dtype 软转换,返回 DataFrame 的 Numpy 表示。或者,您可以按照上面的建议指定与usecols 一起使用的列。

来自docs

usecols:类列表或可调用,默认None

返回一个子集 列。如果类似列表,则所有元素都必须是位置元素(即 文档列的整数索引)或对应的字符串 到由用户在名称中提供的列名称或从 文档标题行。

看起来怎么样?

df = pd.read_csv(infile, usecols = ['a', 'b'])         # Read
df_dtypes = df.infer_objects()                         # Soft conversion
x = df.values                                          # Numpy array

print df.info()                                        # Inspect -> Object
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3 entries, 0 to 2
Data columns (total 2 columns):
a    3 non-null object
b    3 non-null object
dtypes: object(2)
memory usage: 120.0+ bytes

print df_types.info()                                  # Inspect -> dtype change
  <class 'pandas.core.frame.DataFrame'>
RangeIndex: 3 entries, 0 to 2
Data columns (total 2 columns):
a    3 non-null int64
b    3 non-null int64
dtypes: int64(2)
memory usage: 120.0 bytes

print x                                                # Inspect -> numpy array
[[7 3]
 [1 2]
 [5 1]]

【讨论】:

  • 我没听懂 usecols = ['a', 'b']
  • 我已经包含了对 pandas.read_csv 文档的引用。请让我知道它是否适用于您的情况
  • 谢谢你这确实有效。如上所述,如果属性具有不同的数据类型,我该怎么办?除了浮点数,我还有布尔值、有符号和无符号整数和字符串
  • 去掉 usecols 再试一次。它应该适用于您提到的所有 dtype,以防整个列的相应 dtype 相同。请注意,字符串将始终是对象。另外,如果这有效,请随时为我的答案投票。
  • dtype ={'names': ('ticker', 'year', 'month','day','hi'),'formats': ('f2', 'f2', 'f2','f2', 'S2')
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-31
  • 2017-07-24
  • 2021-07-05
  • 2018-01-03
  • 2021-03-23
  • 1970-01-01
相关资源
最近更新 更多