给定一个带有逗号和分号的矩阵行和列的文本块,我想解析文本并设置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
有什么建议吗?
答案 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]