Skip to content

Commit 4d0eef6

Browse files
authored
Json parametrize more2 (#33163)
1 parent cc3f3eb commit 4d0eef6

File tree

3 files changed

+78
-93
lines changed

3 files changed

+78
-93
lines changed

pandas/conftest.py

+58
Original file line numberDiff line numberDiff line change
@@ -526,6 +526,64 @@ def empty_frame():
526526
return DataFrame()
527527

528528

529+
@pytest.fixture
530+
def int_frame():
531+
"""
532+
Fixture for DataFrame of ints with index of unique strings
533+
534+
Columns are ['A', 'B', 'C', 'D']
535+
536+
A B C D
537+
vpBeWjM651 1 0 1 0
538+
5JyxmrP1En -1 0 0 0
539+
qEDaoD49U2 -1 1 0 0
540+
m66TkTfsFe 0 0 0 0
541+
EHPaNzEUFm -1 0 -1 0
542+
fpRJCevQhi 2 0 0 0
543+
OlQvnmfi3Q 0 0 -2 0
544+
... .. .. .. ..
545+
uB1FPlz4uP 0 0 0 1
546+
EcSe6yNzCU 0 0 -1 0
547+
L50VudaiI8 -1 1 -2 0
548+
y3bpw4nwIp 0 -1 0 0
549+
H0RdLLwrCT 1 1 0 0
550+
rY82K0vMwm 0 0 0 0
551+
1OPIUjnkjk 2 0 0 0
552+
553+
[30 rows x 4 columns]
554+
"""
555+
return DataFrame(tm.getSeriesData()).astype("int64")
556+
557+
558+
@pytest.fixture
559+
def datetime_frame():
560+
"""
561+
Fixture for DataFrame of floats with DatetimeIndex
562+
563+
Columns are ['A', 'B', 'C', 'D']
564+
565+
A B C D
566+
2000-01-03 -1.122153 0.468535 0.122226 1.693711
567+
2000-01-04 0.189378 0.486100 0.007864 -1.216052
568+
2000-01-05 0.041401 -0.835752 -0.035279 -0.414357
569+
2000-01-06 0.430050 0.894352 0.090719 0.036939
570+
2000-01-07 -0.620982 -0.668211 -0.706153 1.466335
571+
2000-01-10 -0.752633 0.328434 -0.815325 0.699674
572+
2000-01-11 -2.236969 0.615737 -0.829076 -1.196106
573+
... ... ... ... ...
574+
2000-02-03 1.642618 -0.579288 0.046005 1.385249
575+
2000-02-04 -0.544873 -1.160962 -0.284071 -1.418351
576+
2000-02-07 -2.656149 -0.601387 1.410148 0.444150
577+
2000-02-08 -1.201881 -1.289040 0.772992 -1.445300
578+
2000-02-09 1.377373 0.398619 1.008453 -0.928207
579+
2000-02-10 0.473194 -0.636677 0.984058 0.511519
580+
2000-02-11 -0.965556 0.408313 -1.312844 -0.381948
581+
582+
[30 rows x 4 columns]
583+
"""
584+
return DataFrame(tm.getTimeSeriesData())
585+
586+
529587
@pytest.fixture
530588
def float_frame():
531589
"""

pandas/tests/frame/conftest.py

-60
Original file line numberDiff line numberDiff line change
@@ -79,66 +79,6 @@ def bool_frame_with_na():
7979
return df
8080

8181

82-
@pytest.fixture
83-
def int_frame():
84-
"""
85-
Fixture for DataFrame of ints with index of unique strings
86-
87-
Columns are ['A', 'B', 'C', 'D']
88-
89-
A B C D
90-
vpBeWjM651 1 0 1 0
91-
5JyxmrP1En -1 0 0 0
92-
qEDaoD49U2 -1 1 0 0
93-
m66TkTfsFe 0 0 0 0
94-
EHPaNzEUFm -1 0 -1 0
95-
fpRJCevQhi 2 0 0 0
96-
OlQvnmfi3Q 0 0 -2 0
97-
... .. .. .. ..
98-
uB1FPlz4uP 0 0 0 1
99-
EcSe6yNzCU 0 0 -1 0
100-
L50VudaiI8 -1 1 -2 0
101-
y3bpw4nwIp 0 -1 0 0
102-
H0RdLLwrCT 1 1 0 0
103-
rY82K0vMwm 0 0 0 0
104-
1OPIUjnkjk 2 0 0 0
105-
106-
[30 rows x 4 columns]
107-
"""
108-
df = DataFrame({k: v.astype(int) for k, v in tm.getSeriesData().items()})
109-
# force these all to int64 to avoid platform testing issues
110-
return DataFrame({c: s for c, s in df.items()}, dtype=np.int64)
111-
112-
113-
@pytest.fixture
114-
def datetime_frame():
115-
"""
116-
Fixture for DataFrame of floats with DatetimeIndex
117-
118-
Columns are ['A', 'B', 'C', 'D']
119-
120-
A B C D
121-
2000-01-03 -1.122153 0.468535 0.122226 1.693711
122-
2000-01-04 0.189378 0.486100 0.007864 -1.216052
123-
2000-01-05 0.041401 -0.835752 -0.035279 -0.414357
124-
2000-01-06 0.430050 0.894352 0.090719 0.036939
125-
2000-01-07 -0.620982 -0.668211 -0.706153 1.466335
126-
2000-01-10 -0.752633 0.328434 -0.815325 0.699674
127-
2000-01-11 -2.236969 0.615737 -0.829076 -1.196106
128-
... ... ... ... ...
129-
2000-02-03 1.642618 -0.579288 0.046005 1.385249
130-
2000-02-04 -0.544873 -1.160962 -0.284071 -1.418351
131-
2000-02-07 -2.656149 -0.601387 1.410148 0.444150
132-
2000-02-08 -1.201881 -1.289040 0.772992 -1.445300
133-
2000-02-09 1.377373 0.398619 1.008453 -0.928207
134-
2000-02-10 0.473194 -0.636677 0.984058 0.511519
135-
2000-02-11 -0.965556 0.408313 -1.312844 -0.381948
136-
137-
[30 rows x 4 columns]
138-
"""
139-
return DataFrame(tm.getTimeSeriesData())
140-
141-
14282
@pytest.fixture
14383
def float_string_frame():
14484
"""

pandas/tests/io/json/test_pandas.py

+20-33
Original file line numberDiff line numberDiff line change
@@ -16,20 +16,15 @@
1616
import pandas._testing as tm
1717

1818
_seriesd = tm.getSeriesData()
19-
_tsd = tm.getTimeSeriesData()
2019

2120
_frame = DataFrame(_seriesd)
22-
_intframe = DataFrame({k: v.astype(np.int64) for k, v in _seriesd.items()})
2321

24-
_tsframe = DataFrame(_tsd)
2522
_cat_frame = _frame.copy()
2623
cat = ["bah"] * 5 + ["bar"] * 5 + ["baz"] * 5 + ["foo"] * (len(_cat_frame) - 15)
2724
_cat_frame.index = pd.CategoricalIndex(cat, name="E")
2825
_cat_frame["E"] = list(reversed(cat))
2926
_cat_frame["sort"] = np.arange(len(_cat_frame), dtype="int64")
3027

31-
_mixed_frame = _frame.copy()
32-
3328

3429
def assert_json_roundtrip_equal(result, expected, orient):
3530
if orient == "records" or orient == "values":
@@ -43,17 +38,10 @@ def assert_json_roundtrip_equal(result, expected, orient):
4338
class TestPandasContainer:
4439
@pytest.fixture(autouse=True)
4540
def setup(self):
46-
self.intframe = _intframe.copy()
47-
self.tsframe = _tsframe.copy()
48-
self.mixed_frame = _mixed_frame.copy()
4941
self.categorical = _cat_frame.copy()
5042

5143
yield
5244

53-
del self.intframe
54-
del self.tsframe
55-
del self.mixed_frame
56-
5745
def test_frame_double_encoded_labels(self, orient):
5846
df = DataFrame(
5947
[["a", "b"], ["c", "d"]],
@@ -137,12 +125,12 @@ def test_roundtrip_simple(self, orient, convert_axes, numpy, dtype, float_frame)
137125
@pytest.mark.parametrize("dtype", [False, np.int64])
138126
@pytest.mark.parametrize("convert_axes", [True, False])
139127
@pytest.mark.parametrize("numpy", [True, False])
140-
def test_roundtrip_intframe(self, orient, convert_axes, numpy, dtype):
141-
data = self.intframe.to_json(orient=orient)
128+
def test_roundtrip_intframe(self, orient, convert_axes, numpy, dtype, int_frame):
129+
data = int_frame.to_json(orient=orient)
142130
result = pd.read_json(
143131
data, orient=orient, convert_axes=convert_axes, numpy=numpy, dtype=dtype
144132
)
145-
expected = self.intframe.copy()
133+
expected = int_frame
146134
if (
147135
numpy
148136
and (is_platform_32bit() or is_platform_windows())
@@ -236,13 +224,13 @@ def test_roundtrip_empty(self, orient, convert_axes, numpy, empty_frame):
236224

237225
@pytest.mark.parametrize("convert_axes", [True, False])
238226
@pytest.mark.parametrize("numpy", [True, False])
239-
def test_roundtrip_timestamp(self, orient, convert_axes, numpy):
227+
def test_roundtrip_timestamp(self, orient, convert_axes, numpy, datetime_frame):
240228
# TODO: improve coverage with date_format parameter
241-
data = self.tsframe.to_json(orient=orient)
229+
data = datetime_frame.to_json(orient=orient)
242230
result = pd.read_json(
243231
data, orient=orient, convert_axes=convert_axes, numpy=numpy
244232
)
245-
expected = self.tsframe.copy()
233+
expected = datetime_frame.copy()
246234

247235
if not convert_axes: # one off for ts handling
248236
# DTI gets converted to epoch values
@@ -730,34 +718,33 @@ def test_reconstruction_index(self):
730718
result = read_json(df.to_json())
731719
tm.assert_frame_equal(result, df)
732720

733-
def test_path(self, float_frame):
721+
def test_path(self, float_frame, int_frame, datetime_frame):
734722
with tm.ensure_clean("test.json") as path:
735723
for df in [
736724
float_frame,
737-
self.intframe,
738-
self.tsframe,
739-
self.mixed_frame,
725+
int_frame,
726+
datetime_frame,
740727
]:
741728
df.to_json(path)
742729
read_json(path)
743730

744-
def test_axis_dates(self, datetime_series):
731+
def test_axis_dates(self, datetime_series, datetime_frame):
745732

746733
# frame
747-
json = self.tsframe.to_json()
734+
json = datetime_frame.to_json()
748735
result = read_json(json)
749-
tm.assert_frame_equal(result, self.tsframe)
736+
tm.assert_frame_equal(result, datetime_frame)
750737

751738
# series
752739
json = datetime_series.to_json()
753740
result = read_json(json, typ="series")
754741
tm.assert_series_equal(result, datetime_series, check_names=False)
755742
assert result.name is None
756743

757-
def test_convert_dates(self, datetime_series):
744+
def test_convert_dates(self, datetime_series, datetime_frame):
758745

759746
# frame
760-
df = self.tsframe.copy()
747+
df = datetime_frame
761748
df["date"] = Timestamp("20130101")
762749

763750
json = df.to_json()
@@ -837,8 +824,8 @@ def test_convert_dates_infer(self, infer_word):
837824
("20130101 20:43:42.123456789", "ns"),
838825
],
839826
)
840-
def test_date_format_frame(self, date, date_unit):
841-
df = self.tsframe.copy()
827+
def test_date_format_frame(self, date, date_unit, datetime_frame):
828+
df = datetime_frame
842829

843830
df["date"] = Timestamp(date)
844831
df.iloc[1, df.columns.get_loc("date")] = pd.NaT
@@ -853,8 +840,8 @@ def test_date_format_frame(self, date, date_unit):
853840
expected["date"] = expected["date"].dt.tz_localize("UTC")
854841
tm.assert_frame_equal(result, expected)
855842

856-
def test_date_format_frame_raises(self):
857-
df = self.tsframe.copy()
843+
def test_date_format_frame_raises(self, datetime_frame):
844+
df = datetime_frame
858845
msg = "Invalid value 'foo' for option 'date_unit'"
859846
with pytest.raises(ValueError, match=msg):
860847
df.to_json(date_format="iso", date_unit="foo")
@@ -890,8 +877,8 @@ def test_date_format_series_raises(self, datetime_series):
890877
ts.to_json(date_format="iso", date_unit="foo")
891878

892879
@pytest.mark.parametrize("unit", ["s", "ms", "us", "ns"])
893-
def test_date_unit(self, unit):
894-
df = self.tsframe.copy()
880+
def test_date_unit(self, unit, datetime_frame):
881+
df = datetime_frame
895882
df["date"] = Timestamp("20130101 20:43:42")
896883
dl = df.columns.get_loc("date")
897884
df.iloc[1, dl] = Timestamp("19710101 20:43:42")

0 commit comments

Comments
 (0)