将genfromtxt数组转换为常规numpy数组



我不能发布正在导入的数据,因为它太多了。但是,它有数字和字符串字段,有5543行137列。我用下面的代码导入数据(ndnames和ndtypes保存列名和列数据类型):

npArray2 = np.genfromtxt(fileName, 
                        delimiter="|", 
                        skip_header=1, 
                        dtype=(ndtypes), 
                        names=ndnames, 
                        usecols=np.arange(0,137)
                        )

这可以工作,结果变量类型是"void7520",大小为(5543,)。但这实际上是一个包含5543行的1D数组,其中每个元素包含一个包含137个元素的子数组。我想把它转换成一个普通的numpy数组,包含5543行和137列。如何做到这一点?

我尝试了以下操作(使用Pandas):

pdArray = pd.read_csv(fileName, 
                      sep=ndelimiter,
                      index_col=False, 
                      skiprows=1,
                      names=ndnames
                      )
npArray = pd.DataFrame.as_matrix(pdArray)

但是,结果的npArray是大小为(5543,137)的类型对象,乍一看,这看起来很有希望。但是,因为它是Object类型,所以还有其他函数不能在它上面执行。这个Object数组可以被转换成一个普通的numpy数组吗?

编辑:ndtype看起来像……(int, int, int,…| U50’,int,…,int,"| U50’,int,…,int)即135个数字字段,中间有两个字符串类型的字段。

npArray2是一个一维结构化数组,有5543个元素和137个字段。

npArray2.dtype看起来像什么,或者等价地ndtypes是什么,因为dtype是根据您提供的类型和名称构建的。"void7520"是一种识别该数组记录的方法,但除了大小(以字节为单位?)之外,它几乎没有告诉我们什么。

如果dtype的所有字段都是数字,如果它们都是相同的数字dtype (int, float)则更好,那么将其转换为具有137列的2d数组(2nd dim)相当容易。astypeview可以使用

(edit - it has both number and string fields -你不能把它转换成2d数组的数字;它可以是字符串数组,但不能对字符串进行数值运算。)

但是如果dtypes是混合的,那么你不能转换它。2d数组的所有元素必须是相同的d类型。如果需要混合类型,则必须使用结构化数组方法。(好吧,有dtype=object,但我们不去那里)。

实际上pandas走的是object的路线。显然,它认为从这些数据创建数组的唯一方法是让每个元素都有自己的类型。对象数组的数学运算受到严重限制。实际上,它们是一个美化或贬低的列表。

相关内容

  • 没有找到相关文章

最新更新