2017-10-19 70 views
1

对于一个任务(我是一个初学者),我必须找到最大值。温度和相应的日期。这是我的代码,但它不起作用。我知道我定义的日期错误,或者我应该尝试另一种方法,但我不知道做什么不同。我得到以下错误:类型错误:在类不能做标签索引“pandas.core.indexes.range.RangeIndex”这些索引[-1.3]类的numpy.float64“的找到值对应的其他值

这是我的代码:

import pandas as pd 
import matplotlib.pyplot as plt 

# read data 
data = pd.read_csv("klimaat.csv") 
data["TX"] /= 10 
maxvalue = data['TX'][0] 

for i in range(1, len(data["TX"])): 
    if(data["TX"][i] > maxvalue): 
     maxvalue = data["TX"][i] 

date = data["DATE"][maxvalue] 
print(maxvalue,date) 

我的数据文件的截图: csv file!

+0

你能提供你的数据看起来像什么的摘录? – cer

+0

@cer我编辑了我的文章! – Julia

回答

0

还有就是皮肤猫不止一种方法 - 这种方法是不是最有效的,但这里的理念是:

将温度放在一个列表中,并将日期放在另一个列表中。查找列表中温度的最大值及其位置。使用该位置查找与最高温度相对应的日期。

temperatures = [] 
dates = [] 

with open('filename.csv', 'r') as input_file: 
    input_file.readline() #this skips the header 
    for line in input_file.readlines(): 
     sLine = line.split(',') 

     date = sLine[2] 
     temp = sLine[3] 

     temperatures.append(temp) 
     dates.append(date) 


maxtemp = max(temperatures) 
location = temperatures.index(maxtemp) 

print(max(temperatures)) 
print(location) 
print(dates[location]) 
+0

那么你是说我不应该继续我拥有的东西? – Julia

+0

正如cer所说,这种方法是有效的,但它远非最佳。我建议继续使用您的Pandas解决方案。学习使用熊猫将比学习循环列表更有益。不要误解,cer的答案是有用的,但从数据分析的角度来看,学习如何在熊猫中进行操作会更有益处。 – tnknepp

+0

我明白了,我要去尝试cer的方法:) – Julia

0

您在使用温度作为该行的索引值:

date = data["DATE"][maxvalue] 

MAXVALUE是温度和你正在使用它作为一个指标。您可以通过以下方式获取索引值(即日期):

date = data.DATE[data.TX==maxvalue] 

注意:如果使用浮点数,请小心比较浮点数值。

+0

当我这样做,我得到这个输出; 36.8 Int64Index([16978],dtype ='int64') – Julia

+0

啊,对不起,我认为数据帧索引是日期时间。我更新了我的答案。 – tnknepp

+0

更新我的答案后,我看到你的原始解决方案并不遥远!一个微小的错误,所以很高兴知道你非常接近。 – tnknepp