读取数据文件(鲍鱼)并转换为numpy数组

时间:2018-11-14 22:18:24

标签: python numpy

当我尝试按以下方式加载UCI鲍鱼数据文件时:

dattyp = [('sex',object),('length',float),('diameter',float),('height',float),('whole weight',float),('shucked weight',float),('viscera weight',float),('shell weight',float),('rings',int)]

abalone_data = np.loadtxt('C:/path/abalone.dat',dtype = dattyp, delimiter = ',')

print(abalone_data.shape)
print(abalone_data[0])
>>(4177,)
  ('M',  0.455,  0.365,  0.095,  0.514,  0.2245,  0.101,  0.15, 15)

Abalone_data是一个具有1列而不是9列的数组。稍后,当我想将其他数据添加为额外的列时,这给我带来了问题。有什么方法可以将这些数据转换为(4177, 9)矩阵,在那里我可以进行列等的常规添加?
谢谢!

2 个答案:

答案 0 :(得分:2)

您可以使用熊猫:

import pandas as pd

abalone_data = pd.read_csv('C:/path/abalone.dat', header=None).values
abalone_data.shape

输出:

(4177, 9)

答案 1 :(得分:2)

您可以将unpack参数添加到numpy.loadtxt()中。然后,您可以numpy.transpose()新创建的numpy数组来获得所需的数组形状。

import numpy as np

dattyp = [('sex',object),('length',float),('diameter',float),('height',float),('whole weight',float),('shucked weight',float),('viscera weight',float),('shell weight',float),('rings',int)]

abalone_data = np.loadtxt('C:/path/abalone.dat',dtype = dattyp, delimiter = ',', unpack=True)
abalone_data = np.array((abalone_data)).transpose()

print(abalone_data.shape)

退出:

(4177, 9)

来自文档:

  

解压:布尔型,可选

     

如果为True,则对返回的数组进行转置,以使参数可以为   使用x,y,z = loadtxt(...)解压缩。当用于结构化   数据类型,则为每个字段返回数组。默认值为False。