Подведение итогов без использования панд - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть набор данных дождя с интервалом в полчаса.Я хочу суммировать количество осадков за каждый день и отслеживать, сколько точек данных суммируется за день, чтобы учесть пробелы в данных.Затем я хочу создать новый файл со столбцом для даты, столбцом для количества осадков и столбцом для количества точек данных, доступных для суммирования за каждый день.ежедневная сумма - это моя функция, которая пытается это сделать, получение данных - это моя функция для извлечения данных.

def get_data(avrains):
    print('opening{}'.format(avrains))
    with open(avrains, 'r') as rfile:
        header = rfile.readline()
        dates = []
        rainfalls = []
        for line in rfile:
            line = (line.strip())
            row = line.split(',')
            d = datetime.strptime(row[0], '%Y-%m-%d %H:%M:%S')
            r = row[-1]
            dates.append(d)
            rainfalls.append(float(r))
        data = zip(dates, rainfalls)
        data = sorted(data)
        return (data)

def dailysum(rains):
    day_date = []
    rain_sum = []
    for i in rains:
        dayi = i[0]
        rainsi = i[1]
    for i in dayi:
        try:
            if dayi[i]== dayi[i+1]:
                s= rains[i]+rains[i+1]
                rain_sum.append(float(s))
        except:
            pass
            day_date.append(dayi[i]) 

1 Ответ

0 голосов
/ 15 ноября 2018

Существует множество способов решить эту проблему, но я постараюсь максимально приблизиться к существующему коду:

def get_data(avrains):
    """
    opens the file specified in avrains and returns a dictionary
    keyed by date, containing a 2-tuple of the total rainfall and
    the count of data points, like so:
    {
      date(2018, 11, 1) : (0.25, 6),
      date(2018, 11, 2) : (0.00, 5),
    }
    """
    print('opening{}'.format(avrains))
    rainfall_totals = dict()

    with open(avrains, 'r') as rfile:
        header = rfile.readline()
        for line in rfile:
            line = (line.strip())
            row = line.split(',')
            d = datetime.strptime(row[0], '%Y-%m-%d %H:%M:%S')
            r = row[-1]

            try:
                daily_rainfall, daily_count = rainfalls[d]
                daily_rainfall += r
                daily_count += 1
                rainfalls[d] = (daily_rainfall, daily_count)
            except KeyError:
                # if we don't find that date in rainfalls, add it
                rainfalls[d] = (r, 1)

    return rainfalls

Теперь, когда вы позвоните get_data("/path/to/file"), вы получитеназад словарь.Вы можете выплюнуть значения с помощью чего-то вроде этого:

foo = get_data("/path/to/file")
for (measure_date, (rainfall, observations)) in foo.items():
    print measure_date, rainfall, observations

(я оставлю форматирование даты и любую сортировку или запись в файл в качестве упражнения :))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...