Skip to content

Commit e1fed97

Browse files
committed
Validate null dates
1 parent 0c18cc6 commit e1fed97

File tree

3 files changed

+23
-0
lines changed

3 files changed

+23
-0
lines changed

pandas/io/sas/sas7bdat.py

+4
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,16 @@ def _convert_datetimes(sas_datetimes: pd.Series, unit: str) -> pd.Series:
5454
if unit == "s":
5555
s_series = sas_datetimes.apply(
5656
lambda sas_float: datetime(1960, 1, 1) + timedelta(seconds=sas_float)
57+
if pd.notnull(sas_float)
58+
else pd.NaT
5759
)
5860
s_series = cast(pd.Series, s_series)
5961
return s_series
6062
elif unit == "d":
6163
d_series = sas_datetimes.apply(
6264
lambda sas_float: datetime(1960, 1, 1) + timedelta(days=sas_float)
65+
if pd.notnull(sas_float)
66+
else pd.NaT
6367
)
6468
d_series = cast(pd.Series, d_series)
6569
return d_series
128 KB
Binary file not shown.

pandas/tests/io/sas/test_sas7bdat.py

+19
Original file line numberDiff line numberDiff line change
@@ -315,3 +315,22 @@ def test_max_sas_date_iterator(datapath):
315315
]
316316
for result, expected in zip(results, expected):
317317
tm.assert_frame_equal(result, expected)
318+
319+
320+
def test_null_date(datapath):
321+
fname = datapath("io", "sas", "data", "dates_null.sas7bdat")
322+
df = pd.read_sas(fname, encoding="utf-8")
323+
324+
expected = pd.DataFrame(
325+
{
326+
"datecol": [
327+
datetime(9999, 12, 29),
328+
pd.NaT,
329+
],
330+
"datetimecol": [
331+
datetime(9999, 12, 29, 23, 59, 59, 998993),
332+
pd.NaT,
333+
],
334+
},
335+
)
336+
tm.assert_frame_equal(df, expected)

0 commit comments

Comments
 (0)