Python-解析csv数据-算法错误

Python-解析csv数据-算法错误,python,algorithm,parsing,csv,pandas,Python,Algorithm,Parsing,Csv,Pandas,我需要解析一个大的csv文件(1Gb),其中包含天气数据。文件本身在这里: 其他信息(站点代码和文件格式): ftp://ftp.ncdc.noaa.gov/pub/data/ghcn/daily/ghcnd stations.txt ftp://ftp.ncdc.noaa.gov/pub/data/ghcn/daily/by_year/readme.txt 我需要找到关于基辅和第聂伯罗彼得罗夫斯克的信息,并将每月的平均值可视化。 我写了一个查找数据和平均值的算法,但它没有给我最近一个月的数据

我需要解析一个大的csv文件(1Gb),其中包含天气数据。

文件本身在这里:

其他信息(站点代码和文件格式):
ftp://ftp.ncdc.noaa.gov/pub/data/ghcn/daily/ghcnd stations.txt
ftp://ftp.ncdc.noaa.gov/pub/data/ghcn/daily/by_year/readme.txt

我需要找到关于基辅和第聂伯罗彼得罗夫斯克的信息,并将每月的平均值可视化。 我写了一个查找数据和平均值的算法,但它没有给我最近一个月的数据

import csv
import matplotlib.pyplot as plt

f = open('2014.csv', 'rb')
try:
reader = csv.reader(f)

avgK = 0
avgD = 0
date = 0
mon = 1
avergK = []
avergD = []
count_date = 1

for row in reader:
    if row[2] == 'TAVG':
        count_date +=1
        date = (int(row[1]) % 10000)

        if row[0] == 'UPM00033345':    
            avgK += float(row[3])/10.0

        elif row[0] == 'UPM00034504':
            avgD += float(row[3])/10.0

    if (date//100 > mon):
        print date //100, mon, date%100, avgK, avgD
        avergK.append(avgK/count_date)
        avergD.append(avgD/count_date)
        mon += 1
        avgK = 0
        avgD = 0
        count_date = 1
        continue
finally:
    f.close()

plt.subplot(2, 1, 1)
plt.plot(avergK)
plt.xlabel('Month')
plt.ylabel('Average Temperature')
plt.title('AVG in Kiev 2014')
plt.grid(True)

plt.subplot(2, 1, 2)
plt.plot(avergD)
plt.xlabel('Month')
plt.ylabel('Average Temperature')
plt.title('AVG in DNIPROPETROVSK 2014')
plt.grid(True)

plt.show()


可以用熊猫解决吗?

也许你可以在这里用熊猫,但你不需要它们来解决当前的问题。发生的情况是,只有当您找到一条包含新月份的行时,您才会存储月平均值。但当你们到达文件末尾时,你们应该在上个月完成这个过程

您的循环应该是:

for row in reader:
    if row[2] == 'TAVG':
        count_date +=1
        date = (int(row[1]) % 10000)

        if row[0] == 'UPM00033345':    
            avgK += float(row[3])/10.0

        elif row[0] == 'UPM00034504':
            avgD += float(row[3])/10.0

    if (date//100 > mon):
        print date //100, mon, date%100, avgK, avgD
        avergK.append(avgK/count_date)
        avergD.append(avgD/count_date)
        mon += 1
        avgK = 0
        avgD = 0
        count_date = 1
        continue

# store values for last month
avergK.append(avgK/count_date)
avergD.append(avgD/count_date)