Подсчитайте точные символы числа с плавающей запятой после десятичной - PullRequest
0 голосов
/ 03 апреля 2019

У меня есть файл cvs с данными, которые я хочу обновить только один раз, и если по ошибке обновление выполняется снова, мне нужно убедиться, что данные не обновляются снова.Перед запуском обновления данные не имеют десятичных разрядов, но после обновления каждое значение делится на 100, поэтому каждая строка будет иметь 2 десятичных разряда.Моя мысль здесь состоит в том, чтобы посчитать количество символов после запятой.

This is what I want to achieve:

If >= 2 then do not update
Else if <=2 then update

Я пытался подсчитать количество символов после запуска обновления, но какое-то значение будет иметь 2 ноля - 120,00.Когда я считаю, что получаю только 1, а не 2. Мне нужно получить 2. По существу, каждое обновленное значение будет иметь 2 десятичных знака, даже если оба являются нулями.

df = pd.read_csv(input.csv, names=['Open','High','Low','Close'])

df = df['Close'].astype(str).str.extract('\.(.*)').str.len()

print(df)

Ответы [ 2 ]

0 голосов
/ 03 апреля 2019

Правильно считать десятки.Это не твоя вина, если 120.00 == 120.0, и я не вижу способа их различить.Поэтому я бы сказал, что у вас уже есть ответ на ваш вопрос.

Однако, если ваш вопрос , как вы можете проверить, был ли файл обновлен , здесь есть предложения в зависимости от того, что выТочная ситуация такова.

Если у вас есть полный контроль над функцией, которая выполняет обновление

Вы можете добавить в конце строку, которая записывает куда-нибудь, что обновление было выполнено:

from pathlib import Path
def update(...):
    path = Path('csv_has_been_updated.txt')
    if path.isfile():
        return  # No update is needed if the file exists
    ...
    # Perform update
    ...
    path.touch()  # Create file on disk to indicate update has been done

Если вы этого не сделаете

Вы можете проверить, был ли файл когда-либо изменен (предполагая, что обновление - единственное, что будет записывать в файл), сравнив даты его создания и изменения (см. принятый ответ на этот вопрос ).

0 голосов
/ 03 апреля 2019

Я не знаком с модулем pd. Однако вы можете сделать что-то вроде этого, где s является строковым значением столбца:

num_decimals = len(s.partition('.')[-1])
...