Программирование на Python: Ошибка при чтении данных SAS в Python - PullRequest
0 голосов
/ 11 сентября 2018

Когда я пытался прочитать файл sas7bdat в python, используя pandas.Это показывает ошибку оттока, как показано ниже.Кто-нибудь знает, как это исправить?Большое спасибо.

import pandas as pd
pd.read_sas('D:/My Documents/data.sas7bdat')

Сообщение об ошибке:

OverflowError                            
Traceback (most recent call last)
pandas\_libs\tslib.pyx in pandas._libs.tslib.array_with_unit_to_datetime()   
pandas\_libs\tslibs\timedeltas.pyx in pandas._libs.tslibs.timedeltas.cast_from_unit()

OverflowError: int too big to convert

Во время обработки вышеуказанного исключения произошло другое исключение:

OutOfBoundsDatetime                       
Traceback (most recent call last)
<ipython-input-17-e9567d888396> in <module>()
----> 1 mdldata1=pd.read_sas('H:/My Documents/data.sas7bdat')
~\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\io\sas\sasreader.py in read_sas(filepath_or_buffer, format, index, encoding, chunksize, iterator)
     66         return reader
     67 
---> 68     data = reader.read()
     69     reader.close()
     70     return data
...
pandas\_libs\tslib.pyx in pandas._libs.tslib.array_with_unit_to_datetime()

pandas\_libs\tslib.pyx in pandas._libs.tslib.array_with_unit_to_datetime()

OutOfBoundsDatetime: cannot convert input 1609887547.0 with the unit 'd'

1 Ответ

0 голосов
/ 11 сентября 2018

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

Если вы можете исправить свой набор данных SAS, либо использовать формат DATETIME, чтобы read_sas () не пыталась преобразовать его взначение даты.Или используйте функцию DATEPART () для преобразования значения в допустимую дату.

Если вы не можете тогда увидеть, есть ли у метода read_sas возможность игнорировать формат, присоединенный к varaible, и просто вернуть количество секунд какзначение с плавающей запятой, что это.Затем вы можете написать свой собственный код, чтобы преобразовать его в дату, если хотите.

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