Skip to content

Commit 4555011

Browse files
massichagramfort
authored andcommitted
fix skip pandas 0.24 (#6151)
* remove skip * fix for pandas 0.24 + bump minimum version to 0.21 * Allow pandas>=0.18 again * use LooseVersion instead of packaging
1 parent 57bcaa8 commit 4555011

File tree

3 files changed

+34
-11
lines changed

3 files changed

+34
-11
lines changed

environment.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ dependencies:
1010
- matplotlib
1111
- cython
1212
- pyqt>=5.9
13-
- pandas
13+
- pandas>=0.18
1414
- xlrd
1515
- scikit-learn
1616
- h5py

mne/datasets/sleep_physionet/_utils.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import os
88
import os.path as op
99
import numpy as np
10+
from distutils.version import LooseVersion
1011

1112
from ...utils import _fetch_file, verbose, _TempDir, _check_pandas_installed
1213
from ..utils import _get_path
@@ -106,6 +107,8 @@ def _update_sleep_temazepam_records(fname=TEMAZEPAM_SLEEP_RECORDS):
106107

107108
# Load and massage the data.
108109
data = pd.read_excel(subjects_fname, header=[0, 1])
110+
if LooseVersion(pd.__version__) >= LooseVersion('0.24.0'):
111+
data = data.set_index(('Subject - age - sex', 'Nr'))
109112
data.index.name = 'subject'
110113
data.columns.names = [None, None]
111114
data = (data.set_index([('Subject - age - sex', 'Age'),
@@ -126,7 +129,10 @@ def _update_sleep_temazepam_records(fname=TEMAZEPAM_SLEEP_RECORDS):
126129
data = data.set_index(['id', 'subject', 'age', 'sex', 'drug',
127130
'lights off', 'night nr', 'record type']).unstack()
128131
data.columns = [l1 + '_' + l2 for l1, l2 in data.columns]
129-
data = data.reset_index().drop(columns=['id'])
132+
if LooseVersion(pd.__version__) < LooseVersion('0.21.0'):
133+
data = data.reset_index().drop(labels=['id'], axis=1)
134+
else:
135+
data = data.reset_index().drop(columns=['id'])
130136

131137
data['sex'] = (data.sex.astype('category')
132138
.cat.rename_categories({1: 'male', 2: 'female'}))
@@ -175,8 +181,10 @@ def _update_sleep_age_records(fname=AGE_SLEEP_RECORDS):
175181
.str.split('.', expand=True)[0]
176182
.astype('category'))
177183

178-
# data = data.set_index(['subject', 'night', 'record type'])
179-
data = data.reset_index().drop(columns=['id'])
184+
if LooseVersion(pd.__version__) < LooseVersion('0.21.0'):
185+
data = data.reset_index().drop(labels=['id'], axis=1)
186+
else:
187+
data = data.reset_index().drop(columns=['id'])
180188
data = data[['subject', 'night', 'record type', 'age', 'sex', 'lights off',
181189
'sha', 'fname']]
182190

mne/datasets/sleep_physionet/tests/test_physionet.py

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,19 @@
44
# License: BSD Style.
55

66
import os.path as op
7-
87
import numpy as np
9-
from numpy.testing import assert_array_equal
10-
118
import pytest
129

10+
from distutils.version import LooseVersion
11+
from numpy.testing import assert_array_equal
12+
1313
from mne.utils import run_tests_if_main, requires_good_network
1414
from mne.utils import requires_pandas, requires_version
1515
from mne.datasets.sleep_physionet import age, temazepam
1616
from mne.datasets.sleep_physionet._utils import _update_sleep_temazepam_records
1717
from mne.datasets.sleep_physionet._utils import _update_sleep_age_records
1818
from mne.datasets.sleep_physionet._utils import AGE_SLEEP_RECORDS
1919
from mne.datasets.sleep_physionet._utils import TEMAZEPAM_SLEEP_RECORDS
20-
# from mne.datasets.sleep_physionet._utils import BASE_URL # XXX not used
2120

2221

2322
@pytest.fixture(scope='session')
@@ -71,7 +70,15 @@ def test_run_update_age_records(tmpdir):
7170
fname = op.join(str(tmpdir), "records.csv")
7271
_update_sleep_age_records(fname)
7372
data = pd.read_csv(fname)
74-
pd.testing.assert_frame_equal(data, pd.read_csv(AGE_SLEEP_RECORDS))
73+
74+
if LooseVersion(pd.__version__) < LooseVersion('0.23.0'):
75+
expected = pd.read_csv(AGE_SLEEP_RECORDS)
76+
assert_array_equal(
77+
data[['subject', 'sha', 'fname']].values,
78+
expected[['subject', 'sha', 'fname']].values,
79+
)
80+
else:
81+
pd.testing.assert_frame_equal(data, pd.read_csv(AGE_SLEEP_RECORDS))
7582

7683

7784
def test_sleep_physionet_age(physionet_tmpdir, mocker):
@@ -129,14 +136,22 @@ def test_sleep_physionet_age(physionet_tmpdir, mocker):
129136
@requires_good_network
130137
@requires_pandas
131138
@requires_version('xlrd', '0.9')
132-
@pytest.mark.skip(reason="Broken with new pandas 0.24 and xlrd")
133139
def test_run_update_temazepam_records(tmpdir):
134140
"""Test Sleep Physionet URL handling."""
135141
import pandas as pd
136142
fname = op.join(str(tmpdir), "records.csv")
137143
_update_sleep_temazepam_records(fname)
138144
data = pd.read_csv(fname)
139-
pd.testing.assert_frame_equal(data, pd.read_csv(TEMAZEPAM_SLEEP_RECORDS))
145+
146+
if LooseVersion(pd.__version__) < LooseVersion('0.23.0'):
147+
expected = pd.read_csv(TEMAZEPAM_SLEEP_RECORDS)
148+
assert_array_equal(
149+
data[['subject', 'sha_Hypnogram', 'sha_PSG']].values,
150+
expected[['subject', 'sha_Hypnogram', 'sha_PSG']].values,
151+
)
152+
else:
153+
pd.testing.assert_frame_equal(
154+
data, pd.read_csv(TEMAZEPAM_SLEEP_RECORDS))
140155

141156

142157
def test_sleep_physionet_temazepam(physionet_tmpdir, mocker):

0 commit comments

Comments
 (0)