Как предотвратить округление в миллисекундах при импорте CSV в Python - PullRequest
1 голос
/ 30 марта 2020

Исходное время в формате csv показано ниже в строке

1/2/19 9: 00: 01.000

1/2/19 9: 00: 01.500

1/2/19 9: 00: 02.000

1/2/19 9: 00: 02.500

1/2/19 9: 00: 03.000

1 / 2/19 9: 00: 03.500

Когда я использую pd.read_csv, я замечаю, что миллисекунды округляются и не выдерживают 500-миллисекундное отклонение.

1/2/19 9 : 00: 01.000

1/2/19 9: 00: 01.000

1/2/19 9: 00: 02.000

1/2/19 9:00 : 02.000

1/2/19 9: 00: 03.000

1/2/19 9: 00: 03.000

Как это предотвратить? Это нормально?

1 Ответ

0 голосов
/ 30 марта 2020

Похоже, что, по крайней мере, в Pandas 0,25 даже наносекунды сохраняются, если вы используете тип данных datetime64 [нс] .

Я сделал такой тест:

  1. Строка ввода:

    txt ='''Date,Amount
    2020-01-02 09:00:01.000200001,1
    2020-01-02 09:00:01.200030002,2
    2020-01-02 09:00:01.250004003,3'''
    
  2. Считать фрейм данных:

    df = pd.read_csv(io.StringIO(txt), parse_dates=[0])
    

    Результат:

                               Date  Amount
    0 2020-01-02 09:00:01.000200001       1
    1 2020-01-02 09:00:01.200030002       2
    2 2020-01-02 09:00:01.250004003       3
    

    Итак, как вы видите, все 9 цифр после десятичной точки на месте.

  3. Печать микросекунд:

    df.Date.dt.microsecond
    

    Результат:

    0       200
    1    200030
    2    250004
    Name: Date, dtype: int64
    
  4. Печать наносекунд:

    df.Date.dt.nanosecond
    

    Результат:

    0    1
    1    2
    2    3
    Name: Date, dtype: int64
    

Может быть, вы используете более старую версию Python или Pandas? Попробуйте обновить их и повторите мой тест на вашем компьютере.

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