我有一个CSV,其中包含气象站的最高和最低温度,降水量,经度和纬度等天气数据。每种类别的数据都存储在一个列中。
我想找到最高和最低温度的位置。找到最大值或最小值很容易: numpy.min(my_temperatures_column)
如何找到最小值或最大值所在的位置,以便找到纬度和经度?
这是我的尝试:
def coldest_location(data):
coldest_temp= numpy.min(mean_temp)
for i in mean_temp:
if mean_temp[i] == -24.6:
print i
错误:列表索引必须为int
我将CSV的每一列保存到变量中,因此它们都是单独的列表。
lat = [row[0] for row in weather_data] # latitude
long = [row[1] for row in weather_data] # longitude
mean_temp = [row[2] for row in weather_data] # mean temperature
我已根据建议list.index(x)
解决了问题mean_temp.index(coldest_temp)
coldest_location=[long[5],lat[5]]
不确定在问题中询问第二个问题是否合适,但如果有两个位置具有相同的最低温度怎么办?我怎么能找到它们和它们的指数?
答案 0 :(得分:50)
您是否考虑过使用Python list的.index(value)
方法?它返回传入value
的第一个实例的列表中的索引。
答案 1 :(得分:13)
如果没有实际查看您的数据,很难说如何在特定情况下找到max和min的位置,但一般情况下,您可以按如下方式搜索位置。这只是一个简单的例子:
In [9]: a=np.array([5,1,2,3,10,4])
In [10]: np.where(a == a.min())
Out[10]: (array([1]),)
In [11]: np.where(a == a.max())
Out[11]: (array([4]),)
或者,您也可以执行以下操作:
In [19]: a=np.array([5,1,2,3,10,4])
In [20]: a.argmin()
Out[20]: 1
In [21]: a.argmax()
Out[21]: 4
答案 2 :(得分:8)
正如Aaron所说,你可以使用.index(value)
,但因为如果value
不存在会引发异常,你应该处理这种情况,即使你确定它永远不会发生。有两种选择是首先检查它的存在,例如:
if value in my_list:
value_index = my_list.index(value)
或通过捕获例外:
try:
value_index = my_list.index(value)
except:
value_index = -1
正确的错误处理永远不会出错。
答案 3 :(得分:3)
你应该这样做:
try:
value_index = my_list.index(value)
except:
value_index = -1;
答案 4 :(得分:2)
答案 5 :(得分:0)
我认为你的变量mean_temp已经加载了它的值并且是nX1维度(即只有一行)。现在要实现你想要的,你可以:
更改变量的数据类型:
def coldest_location(data):
mean_temp = numpy.mat(mean_temp) #data is now matrix type
min_index = numpy.nonzero(mean_temp == mean_temp.min()) # this returns list of indexes
print mean_temp[min_index[0],min_index[1]] # printing minimum value, i.e -24.6 in you data i believe
答案 6 :(得分:0)
假设列表是如下所示的对象集合:
obj = [
{
"subjectId" : "577a54c09c57916109142248",
"evaluableMaterialCount" : 0,
"subjectName" : "ASP.net"
},
{
"subjectId" : "56645cd63c43a07b61c2c650",
"subjectName" : ".NET",
},
{
"subjectId" : "5656a2ec3c43a07b61c2bd83",
"subjectName" : "Python",
},
{
"subjectId" : "5662add93c43a07b61c2c58c",
"subjectName" : "HTML"
}
]
您可以使用以下方法找到索引。假设subjectId为5662add93c43a07b61c2c58c,然后获取该对象在列表中的索引,
subjectId = "5662add93c43a07b61c2c58c"
for i, subjobj in enumerate(obj):
if(subjectId == subjobj['subjectId']):
print(i)
答案 7 :(得分:0)
对于第一个问题,使用index()在列表 x 中找到某个值的位置,如下所示:
x.index(value)
对于第二个问题,要检查多个相同的值,应将列表分成多个块,并使用上面的相同逻辑。他们说分而治之。有用。试试这个:
value = 1
x = [1,2,3,4,5,6,2,1,4,5,6]
chunk_a = x[:int(len(x)/2)] # get the first half of x
chunk_b = x[int(len(x)/2):] # get the rest half of x
print(chunk_a.index(value))
print(chunk_b.index(value))
希望有帮助!
答案 8 :(得分:0)
在 NumPy 数组中,你可以像这样使用 where:
np.where(npArray == 20)