通过匹配Python中其他列的数据来提取列的数据

时间:2016-06-08 05:39:28

标签: python csv row extract

我想提取2010年的所有MaxTemp

Year  Month Day MaxTemp MinTemp
2010    1   1   -19.9   -37.2
2010    1   2   -13.8   -20
2010    1   3   -13.1   -15.9
2010    1   4   -12     -22.3
2010    1   5   -11.8   -14.4
2010    1   6   -14.3   -32.5
2010    1   7   -28.2   -37.3
2011    1   8   -21.9   -31.3
2011    1   9   -7.4    -22.8
2011    1   10  -6.6    -15.3
2011    1   11  -0.7    -15.2
2011    1   12   4.3    -5.8

我目前的代码是

    with open('data/'+file_name, "rU") as files:
      val = list(csv.reader(files))[1:]

具体输出

[['2010', '01', '01', '9.6', '5.8'], ['2010', '01', '02', '8.6', '6.2'], ['2010', '01', '03', '8.8', '6.0'], ['2010', '01', '04', '6.8', '5.6'], ['2010', '01', '05', '9.0', '4.4'], ['2010', '01', '06', '8.1', '1.0'], ['2010', '01', '07', '6.3', '0.9'], ['2010', '01', '08', '7.8', '4.2'], ['2010', '01', '09', '10.4', '7.5'], ['2010', '01', '10', '11.5', '7.9'], ['2010', '01', '11', '11.9', '8.9']]

这个提取整个csv没有标题。如何才能完成2010年仅提取所有MaxTemp的所需任务。我可以将其作为参数传递。非常感谢。

3 个答案:

答案 0 :(得分:1)

正如罗弗斯所说,但有理解力

with open('data/'+file_name, "rU") as files:
    data = [x[3] for x in csv.reader(files) if str(x[0]) == '2010']

答案 1 :(得分:0)

你可以这样做,然后data将是2010年MaxTemps的列表:

with open('data/'+file_name, "rU") as files:
    data = list()
    for line in csv.reader(files):
        if int(line[0])==2010:
            data.append(line[3])

最好是使用类似pandas的东西并以这种方式过滤数据。如果它不是大量的数据,你应该这样做。

答案 2 :(得分:0)

Here you go:
maxList = list()
for row in val:
    rowInStr = ''.join(row)
    rowSplitList = rowInStr.split(" ")
    if rowSplitList[0] == "2010":
        rowSplitList = filter(lambda a: a!='', rowSplitList)
        maxList.append(rowSplitList[-2])
Output:
['-19.9', '-13.8', '-13.1', '-12', '-11.8', '-14.3', '-28.2', '-21.9', '-7.4', '-6.6', '-0.7', '4.3']

请使用适当的缩进。我更喜欢缩进标签。 希望这会有所帮助。