Информация об изменениях

Сообщение Re[2]: Давайте сравним от 15.01.2020 19:35

Изменено 15.01.2020 19:44 Буравчик

Re[2]: Давайте сравним
Здравствуйте, Ватакуси, Вы писали:

В>"Плохой питон" печатает отсутствующие данные из поступающего через stdin файла(см. http://files.rsdn.org/315/ts1.txt ):


Не понравилось, что используются циклы, а также сторонние библиотеки. Можно обойтись без них. Поэтому еще вариант на питон:
import sys
from itertools import islice
from typing import List

import numpy as np
import pandas as pd


def calc_missing(lines: List[str]) -> pd.Series:
    # формируем dataset из строк
    data = [line.split('\t') for line in lines]
    df = pd.DataFrame(data, columns=['date', 'value'])

    # запоминаем индексы missing-строк для последующего отбора
    missings_indexes = df.value.str.startswith('Missing_')

    # интерполяция
    df.loc[missings_indexes, 'value'] = np.nan
    df['value'] = df.value.astype(float)
    df['date'] = pd.to_datetime(df.date)
    df = df.set_index('date').interpolate(method="time", limit_direction="both").reset_index()
    return df.value.values[missings_indexes]


def main():
    count = int(sys.stdin.readline())
    lines = list(islice(sys.stdin, count))
    missing = calc_missing(lines)
    print(missing)


if __name__ == '__main__':
    main()
Re[2]: Давайте сравним
Здравствуйте, Ватакуси, Вы писали:

В>"Плохой питон" печатает отсутствующие данные из поступающего через stdin файла(см. http://files.rsdn.org/315/ts1.txt ):


Не понравилось, что используются циклы, а также сторонние библиотеки. Можно обойтись без них. Поэтому еще вариант на питон:
import sys
from itertools import islice
from typing import List

import numpy as np
import pandas as pd


def calc_missing(lines: List[str]) -> np.ndarray:
    # формируем dataset из строк
    data = [line.split('\t') for line in lines]
    df = pd.DataFrame(data, columns=['date', 'value'])

    # запоминаем индексы missing-строк для последующего отбора
    missings_indexes = df.value.str.startswith('Missing_')

    # интерполяция
    df.loc[missings_indexes, 'value'] = np.nan
    df['value'] = df.value.astype(float)
    df['date'] = pd.to_datetime(df.date)
    df = df.set_index('date').interpolate(method="time", limit_direction="both").reset_index()
    return df.value.values[missings_indexes]


def main():
    count = int(sys.stdin.readline())
    lines = list(islice(sys.stdin, count))
    missing = calc_missing(lines)
    print(missing)


if __name__ == '__main__':
    main()