Python 如果元素满足条件,则在与其相邻的数组对应的数组中打印str

Python 如果元素满足条件,则在与其相邻的数组对应的数组中打印str,python,arrays,numpy,Python,Arrays,Numpy,我有一个(12,2)Numpy数组,第0列是字符串数组,第1列是nd.array 对于第1列中的每个元素,如果它大于100,那么我希望它在它旁边的字符串数组中打印str print(table) [['Jan' '1765.869'] ['Feb' '1337.9730000000002'] ['Mar' '-2595.4530000000004'] ['Apr' '-2040.0169999999996'] ['May' '-419.944'] ['Jun' '5085.668']

我有一个(12,2)Numpy数组,第0列是字符串数组,第1列是nd.array

对于第1列中的每个元素,如果它大于100,那么我希望它在它旁边的字符串数组中打印str

print(table)
[['Jan' '1765.869']
 ['Feb' '1337.9730000000002']
 ['Mar' '-2595.4530000000004']
 ['Apr' '-2040.0169999999996']
 ['May' '-419.944']
 ['Jun' '5085.668']
 ['Jul' '5747.385']
 ['Aug' '2761.479']
 ['Sep' '2329.8729999999996']
 ['Oct' '-1567.055000000001']
 ['Nov' '461.71999999999895']
 ['Dec' '8140.678']]

经过一个小时的搜索,我找到了访问每个元素的正确方法,我得出了以下结论:

for i in table[:,1]:
    if i > 100:
        print(table[i,:1])
但是遇到了这些错误:


在Jupyter笔记本中:
TypeError:“您可以使用
astype()
将数字转换为浮点数,这将允许您进行比较

import numpy as np

table = np.array([['Jan', '1765.869'],
 ['Feb', '1337.9730000000002'],
 ['Mar', '-2595.4530000000004'],
 ['Apr', '-2040.0169999999996'],
 ['May', '-419.944'],
 ['Jun', '5085.668'],
 ['Jul', '5747.385'],
 ['Aug', '2761.479'],
 ['Sep', '2329.8729999999996'],
 ['Oct', '-1567.055000000001'],
 ['Nov', '461.71999999999895'],
 ['Dec', '8140.678']])

table[table[:,1].astype(float) > 100][:,0]

#array(['Jan', 'Feb', 'Jun', 'Jul', 'Aug', 'Sep', 'Nov', 'Dec'],dtype='<U19')
将numpy导入为np
table=np.array([['Jan','1765.869'],
['Feb','1337.97300000000002'],
[Mar','-2595.45300000000004'],
['Apr','-2040.0169999996'],
[May','-419.944'],
[Jun','5085.668'],
[Jul','5747.385'],
['Aug','2761.479'],
[Sep',2329.8729999996'],
['10月','-1567.055000000001'],
['Nov','461.71999999895'],
['Dec','8140.678']]
表[table[:,1].aType(float)>100][:,0]

#数组(['Jan','Feb','Jun','Jul','Aug','Sep','Nov','Dec'],dtype='您可以使用
astype()
将数字转换为浮点数,这将允许您进行比较

import numpy as np

table = np.array([['Jan', '1765.869'],
 ['Feb', '1337.9730000000002'],
 ['Mar', '-2595.4530000000004'],
 ['Apr', '-2040.0169999999996'],
 ['May', '-419.944'],
 ['Jun', '5085.668'],
 ['Jul', '5747.385'],
 ['Aug', '2761.479'],
 ['Sep', '2329.8729999999996'],
 ['Oct', '-1567.055000000001'],
 ['Nov', '461.71999999999895'],
 ['Dec', '8140.678']])

table[table[:,1].astype(float) > 100][:,0]

#array(['Jan', 'Feb', 'Jun', 'Jul', 'Aug', 'Sep', 'Nov', 'Dec'],dtype='<U19')
将numpy导入为np
table=np.array([['Jan','1765.869'],
['Feb','1337.97300000000002'],
[Mar','-2595.45300000000004'],
['Apr','-2040.0169999996'],
[May','-419.944'],
[Jun','5085.668'],
[Jul','5747.385'],
['Aug','2761.479'],
[Sep',2329.8729999996'],
['10月','-1567.055000000001'],
['Nov','461.71999999895'],
['Dec','8140.678']]
表[table[:,1].aType(float)>100][:,0]

#数组(['Jan','Feb','Jun','Jul','Aug','Sep','Nov','Dec'],dtype='尝试成对遍历数组:

x = np.array([['Jan', '1765.869'],
 ['Feb', '1337.9730000000002'],
 ['Mar', '-2595.4530000000004'],
 ['Apr', '-2040.0169999999996'],
 ['May', '-419.944'],
 ['Jun', '5085.668'],
 ['Jul', '5747.385'],
 ['Aug', '2761.479'],
 ['Sep', '2329.8729999999996'],
 ['Oct', '-1567.055000000001'],
 ['Nov', '461.71999999999895'],
 ['Dec', '8140.678']])

for mon, num in x:
    if float(num) > 100:
        print(mon)
这导致

Jan
Feb
Jun
Jul
Aug
Sep
Nov
Dec
编辑:要接近最大值的确定,因为您已经在所有项目中循环,最简单的方法是只跟踪最大值和对应于该最大值的月份:

max_val = 0
max_month = ''
for mon, num in x:
    val = float(num)
    if val > 100:
        print(mon)
    if val > max_val:
        max_val = val
        max_month = mon

print(max_month)
或者,您可以使用一个衬里:

print(max([(float(num), mon) for mon, num in x])[1])

尝试成对遍历数组:

x = np.array([['Jan', '1765.869'],
 ['Feb', '1337.9730000000002'],
 ['Mar', '-2595.4530000000004'],
 ['Apr', '-2040.0169999999996'],
 ['May', '-419.944'],
 ['Jun', '5085.668'],
 ['Jul', '5747.385'],
 ['Aug', '2761.479'],
 ['Sep', '2329.8729999999996'],
 ['Oct', '-1567.055000000001'],
 ['Nov', '461.71999999999895'],
 ['Dec', '8140.678']])

for mon, num in x:
    if float(num) > 100:
        print(mon)
这导致

Jan
Feb
Jun
Jul
Aug
Sep
Nov
Dec
编辑:要接近最大值的确定,因为您已经在所有项目中循环,最简单的方法是只跟踪最大值和对应于该最大值的月份:

max_val = 0
max_month = ''
for mon, num in x:
    val = float(num)
    if val > 100:
        print(mon)
    if val > max_val:
        max_val = val
        max_month = mon

print(max_month)
或者,您可以使用一个衬里:

print(max([(float(num), mon) for mon, num in x])[1])


你能把你的实际数组作为python代码而不是图像发布吗?刚刚用它编辑了帖子。谢谢你的关注。你能把你的实际数组作为python代码而不是图像发布吗?刚刚用它编辑了帖子。谢谢你的关注。谢谢。奇怪的是,我在我的表中的每个方括号配对后都没有看到逗号。我是用using np.concatenate of two np ndarray。知道为什么吗?@ktan如果你打印出来,这就是
numpy
显示数组的方式。它仍然是一个有效数组,你只需要在code@ktan这是数组的
str()
repr()
之间的区别。您可以像
print(repr>那样打印(表)
获取逗号。谢谢。奇怪的是,我在表中的每个方括号对后都没有看到逗号。我使用两个np Ndarray的np.concatenate创建了它。知道为什么吗?@ktan如果打印出来,这就是
numpy
显示数组的方式。它仍然是一个有效数组,您只需要在代码中使用逗号来定义它@ktan这是数组的
str()
repr()
之间的区别。您可以像
print(repr(table))一样打印
获取逗号。谢谢。在x之后解析时,我得到一个意外的EOF:。列是否需要命名为mon和num,或者只插入数组的名称就可以了?@ktan您能发布准确的错误吗?这听起来像是一个
语法错误
,与执行无关。不,变量
mon
num
对列的名称没有任何意义,您可以将这两个变量命名为任何月份,利润在表中征税:^SyntaxError:意外的EOF whileparsing@ktan您是否试图逐行在REPL(如IDLE)中键入此内容?如果要运行如果代码以您尝试的方式处于空闲状态,则必须将对应于for循环的整个块作为单个输入。实际上,我是逐块执行此块的--在我选择了许多块之后,它才起作用。谢谢!!!谢谢。在x之后解析时,我收到了意外的EOF:。列需要命名为mon和num吗只需插入数组的名称就可以了?@ktan你能发布准确的错误吗?这听起来像是一个
SyntaxError
,与执行无关。不,变量
mon
num
对列的名称没有任何意义,你可以在几个月内对这两个变量进行命名,利润税在表中:^SyntaxError:意外的EOF whileparsing@ktan您是否试图将其逐行输入到REPL(如IDLE)中?如果您想以尝试的方式以IDLE方式运行此代码,则必须将与for循环相对应的整个块作为一个单独的输入,实际上I was executing这一块一块——在我之前选择了许多块之后,它就工作了。谢谢!!!