Python循环遍历文本并设置numpy数组索引

时间:2017-11-14 16:41:03

标签: python numpy

给定一个带有逗号和分号的矩阵行和列的文本块,我想解析文本并设置numpy数组的索引。这是代码基本文本变量'matrixText'的代码。

我首先创建矩阵,然后用分号然后用逗号分隔文本。我遍历拆分文本并设置每个索引。但是有了文字......

1,2,3; 4,5,6; 7,8,9

我得到了结果

7,7,7; 8,8,8; 9,9,9

import pandas as pd

products = pd.DataFrame({'category': ['Cleaning', 'Cleaning', 'Entertainment', 'Entertainment', 'Tech', 'Tech'],
                    'store': ['Walmart', 'Dia', 'Walmart', 'Fnac', 'Dia','Walmart'],
                    'price':[11.42, 23.50, 19.99, 15.95, 55.75, 111.55],
                    'testscore': [4, 3, 5, 7, 5, 8]})

pivot_products = products.pivot(index='category', columns='store', values='price') 

print(pivot_products)

我认为通过设置每个索引,我会避免任何副本引用问题。

为了提供更多信息,在第一次迭代中,0,0索引设置为1,然后输出为1,1,1; 0,0,0; ​​0,0,0我可以' t弄清楚,因为在numpy数组中设置一个索引会设置三个。

在第二次迭代中,索引0-1设置为2,结果为2,2,2; 2,2,2; 0,0,0

第三次迭代将0-2设置为3,但结果为3,3,3; 2,2,2; 3,3,3

有什么建议吗?

5 个答案:

答案 0 :(得分:1)

你可以(ab-)使用matrix构造函数加上A属性

np.matrix('1,2,3;4,5,6;7,8,9').A

输出:

array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])

答案 1 :(得分:0)

matrixText = '1,2,3;4,5,6;7,8,9'
temp1=matrixText.split(';')
temp2=temp1[0].split(',')
rows=len(temp1)
columns=len(temp2)
rA=np.empty((rows, columns),dtype=np.int)
for n, line in enumerate(temp1):         
    rA[n,:]=line.split(',')

答案 2 :(得分:0)

使用嵌套list-comprehension

已定义:

s = "1,2,3;4,5,6;7,8,9"

我们可以使用不错的one-liner

np.array([[int(c) for c in r.split(",")] for r in s.split(";")])

将提供以下array

array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])

答案 3 :(得分:0)

另一个单行(+1导入):

from io import StringIO
rA = np.loadtxt(StringIO(matrixText.replace(';','\n')), delimiter=',')

答案 4 :(得分:0)

所以,这里的问题是rA [[rowIndex,colIndex]]中的双括号导致行中的每个单元格都被设置。这应该是rA [rowIndex,colIndex]