Python 使用包含多种类型的数据进行数组切片
我用Python 使用包含多种类型的数据进行数组切片,python,arrays,numpy,Python,Arrays,Numpy,我用numpy.genfromtxt读入以下对象: A = [(4, 'A', 3750.5), (4, 'B', 3252.6), (8, 'A', 3350.5), (8, 'B', 3152.6)] 4 A 3750.5 4 B 3270.5 8 A 3480.5 8 B 3590.5 我想对它进行numpy索引,但我不能,因为这不是numpy数组。这是一个列表数组 获取第一列中有“4”的所有行的第三列的最佳方法是什么 我尝试了A[A[:,0]==4]
numpy.genfromtxt
读入以下对象:
A = [(4, 'A', 3750.5),
(4, 'B', 3252.6),
(8, 'A', 3350.5),
(8, 'B', 3152.6)]
4 A 3750.5
4 B 3270.5
8 A 3480.5
8 B 3590.5
我想对它进行numpy索引,但我不能,因为这不是numpy数组。这是一个列表数组
获取第一列中有“4”的所有行的第三列的最佳方法是什么
我尝试了A[A[:,0]==4]
,但解释器抱怨“索引器错误:索引无效”
编辑:
这是我正在使用的python程序:
import numpy as np
A = np.genfromtxt( "text.txt" , dtype=( int , "|S10", float))
A_array = np.asarray(A, dtype=object)
print A
print A_array
文件text.txt
:
A = [(4, 'A', 3750.5),
(4, 'B', 3252.6),
(8, 'A', 3350.5),
(8, 'B', 3152.6)]
4 A 3750.5
4 B 3270.5
8 A 3480.5
8 B 3590.5
这是输出:
[(4, 'A', 3750.5) (4, 'B', 3270.5) (8, 'A', 3480.5) (8, 'B', 3590.5)]
[(4, 'A', 3750.5) (4, 'B', 3270.5) (8, 'A', 3480.5) (8, 'B', 3590.5)]
我错过了什么
In [24]: A_array = numpy.asarray(A, dtype=object)
In [25]: A_array[A_array[:,0] == 4]
Out[25]:
array([[4, A, 3750.5],
[4, B, 3252.6]], dtype=object)
如果数据列有你想跟踪的语义,考虑将元组列表直接加载到A中,并给它们列标签。逻辑索引的工作原理类似:
In [27]: A_df = pandas.DataFrame(A, columns=['Col1', 'Col2', 'Col3'])
In [28]: A_df
Out[28]:
Col1 Col2 Col3
0 4 A 3750.5
1 4 B 3252.6
2 8 A 3350.5
3 8 B 3152.6
In [29]: A_df.Col1 == 4
Out[29]:
0 True
1 True
2 False
3 False
Name: Col1
In [30]: A_df[A_df.Col1 == 4]
Out[30]:
Col1 Col2 Col3
0 4 A 3750.5
1 4 B 3252.6
如果数据列有你想跟踪的语义,考虑将元组列表直接加载到A中,并给它们列标签。逻辑索引的工作原理类似:
In [27]: A_df = pandas.DataFrame(A, columns=['Col1', 'Col2', 'Col3'])
In [28]: A_df
Out[28]:
Col1 Col2 Col3
0 4 A 3750.5
1 4 B 3252.6
2 8 A 3350.5
3 8 B 3152.6
In [29]: A_df.Col1 == 4
Out[29]:
0 True
1 True
2 False
3 False
Name: Col1
In [30]: A_df[A_df.Col1 == 4]
Out[30]:
Col1 Col2 Col3
0 4 A 3750.5
1 4 B 3252.6
首先,在
A
中的列表元素之间需要逗号,否则会出现语法错误:
A = [(4, 'A', 3750.5),
(4, 'B', 3252.6),
(8, 'A', 3350.5),
(8, 'B', 3152.6)]
接下来,您可以使用a非常简洁地获得您想要的:
[ row[2] for row in A if row[0] == 4 ]
结果:
[3750.5, 3252.6]
首先,在
A
中的列表元素之间需要逗号,否则会出现语法错误:
A = [(4, 'A', 3750.5),
(4, 'B', 3252.6),
(8, 'A', 3350.5),
(8, 'B', 3152.6)]
接下来,您可以使用a非常简洁地获得您想要的:
[ row[2] for row in A if row[0] == 4 ]
结果:
[3750.5, 3252.6]
A
实际上是元组列表,而不是列表数组。为什么有人在数组中插入逗号?如果我打印A,则没有逗号。它可能是一个元组列表吗?您使用了a=…
表示您正在分配数据。当你“打印”数据时,你没有说A=…
,你只是打印内容。当您使用a=…
赋值给变量时,您需要=
符号右侧的值来计算有效的Python对象,如果没有逗号,这是不正确的。确保示例中的数据便于其他人在Python设置中使用也是一种礼貌。如果没有逗号,将该文本复制/粘贴到解释器会产生错误。我将根据需要尝试插入逗号。我解释错了。第一个矩阵是打印命令的输出。问题已更新。抱歉A
实际上是一个元组列表,而不是列表数组。为什么有人在数组中插入逗号?如果我打印A,则没有逗号。它可能是一个元组列表吗?您使用了a=…
表示您正在分配数据。当你“打印”数据时,你没有说A=…
,你只是打印内容。当您使用a=…
赋值给变量时,您需要=
符号右侧的值来计算有效的Python对象,如果没有逗号,这是不正确的。确保示例中的数据便于其他人在Python设置中使用也是一种礼貌。如果没有逗号,将该文本复制/粘贴到解释器会产生错误。我将根据需要尝试插入逗号。我解释错了。第一个矩阵是打印命令的输出。问题已更新。对不起,嗯。。我试过你的第一个解决办法。当我打印A和A_数组时,它们看起来完全相同,并且A_数组上的索引命令与A上的一样失败。除非我能看到您正在执行的特定代码,否则您的注释是不明确的。它对我很有效,而且确实是numpy
中的标准解决方案。此外,如果在使用print
打印它们时A
和A_数组
显示相同,则肯定还有另一个错误。第一个是Python列表
,它在控制台上的打印方式与第二个非常不同,后者是numpy.ndarray
。例如,A_数组
将始终打印一些dtype
字段及其实际数据内容,而列表
.Hmm不存在这些字段。。我试过你的第一个解决办法。当我打印A和A_数组时,它们看起来完全相同,并且A_数组上的索引命令与A上的一样失败。除非我能看到您正在执行的特定代码,否则您的注释是不明确的。它对我很有效,而且确实是numpy
中的标准解决方案。此外,如果在使用print
打印它们时A
和A_数组
显示相同,则肯定还有另一个错误。第一个是Python列表
,它在控制台上的打印方式与第二个非常不同,后者是numpy.ndarray
。例如,A_数组
总是将一些dtype
字段与其实际数据内容一起打印,而列表
则不存在这些字段。