Skip to content

Commit e997225

Browse files
jbrockmendelAlexKirko
authored andcommitted
REF/TST: method-specific files for test_append (pandas-dev#30503)
1 parent 41eae40 commit e997225

9 files changed

+369
-370
lines changed
+179
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,179 @@
1+
import numpy as np
2+
import pytest
3+
4+
import pandas as pd
5+
from pandas import DataFrame, Series, Timestamp
6+
import pandas.util.testing as tm
7+
8+
9+
class TestDataFrameAppend:
10+
def test_append_empty_list(self):
11+
# GH 28769
12+
df = DataFrame()
13+
result = df.append([])
14+
expected = df
15+
tm.assert_frame_equal(result, expected)
16+
assert result is not df
17+
18+
df = DataFrame(np.random.randn(5, 4), columns=["foo", "bar", "baz", "qux"])
19+
result = df.append([])
20+
expected = df
21+
tm.assert_frame_equal(result, expected)
22+
assert result is not df # .append() should return a new object
23+
24+
def test_append_series_dict(self):
25+
df = DataFrame(np.random.randn(5, 4), columns=["foo", "bar", "baz", "qux"])
26+
27+
series = df.loc[4]
28+
msg = "Indexes have overlapping values"
29+
with pytest.raises(ValueError, match=msg):
30+
df.append(series, verify_integrity=True)
31+
32+
series.name = None
33+
msg = "Can only append a Series if ignore_index=True"
34+
with pytest.raises(TypeError, match=msg):
35+
df.append(series, verify_integrity=True)
36+
37+
result = df.append(series[::-1], ignore_index=True)
38+
expected = df.append(
39+
DataFrame({0: series[::-1]}, index=df.columns).T, ignore_index=True
40+
)
41+
tm.assert_frame_equal(result, expected)
42+
43+
# dict
44+
result = df.append(series.to_dict(), ignore_index=True)
45+
tm.assert_frame_equal(result, expected)
46+
47+
result = df.append(series[::-1][:3], ignore_index=True)
48+
expected = df.append(
49+
DataFrame({0: series[::-1][:3]}).T, ignore_index=True, sort=True
50+
)
51+
tm.assert_frame_equal(result, expected.loc[:, result.columns])
52+
53+
# can append when name set
54+
row = df.loc[4]
55+
row.name = 5
56+
result = df.append(row)
57+
expected = df.append(df[-1:], ignore_index=True)
58+
tm.assert_frame_equal(result, expected)
59+
60+
def test_append_list_of_series_dicts(self):
61+
df = DataFrame(np.random.randn(5, 4), columns=["foo", "bar", "baz", "qux"])
62+
63+
dicts = [x.to_dict() for idx, x in df.iterrows()]
64+
65+
result = df.append(dicts, ignore_index=True)
66+
expected = df.append(df, ignore_index=True)
67+
tm.assert_frame_equal(result, expected)
68+
69+
# different columns
70+
dicts = [
71+
{"foo": 1, "bar": 2, "baz": 3, "peekaboo": 4},
72+
{"foo": 5, "bar": 6, "baz": 7, "peekaboo": 8},
73+
]
74+
result = df.append(dicts, ignore_index=True, sort=True)
75+
expected = df.append(DataFrame(dicts), ignore_index=True, sort=True)
76+
tm.assert_frame_equal(result, expected)
77+
78+
def test_append_missing_cols(self):
79+
# GH22252
80+
# exercise the conditional branch in append method where the data
81+
# to be appended is a list and does not contain all columns that are in
82+
# the target DataFrame
83+
df = DataFrame(np.random.randn(5, 4), columns=["foo", "bar", "baz", "qux"])
84+
85+
dicts = [{"foo": 9}, {"bar": 10}]
86+
with tm.assert_produces_warning(None):
87+
result = df.append(dicts, ignore_index=True, sort=True)
88+
89+
expected = df.append(DataFrame(dicts), ignore_index=True, sort=True)
90+
tm.assert_frame_equal(result, expected)
91+
92+
def test_append_empty_dataframe(self):
93+
94+
# Empty df append empty df
95+
df1 = DataFrame()
96+
df2 = DataFrame()
97+
result = df1.append(df2)
98+
expected = df1.copy()
99+
tm.assert_frame_equal(result, expected)
100+
101+
# Non-empty df append empty df
102+
df1 = DataFrame(np.random.randn(5, 2))
103+
df2 = DataFrame()
104+
result = df1.append(df2)
105+
expected = df1.copy()
106+
tm.assert_frame_equal(result, expected)
107+
108+
# Empty df with columns append empty df
109+
df1 = DataFrame(columns=["bar", "foo"])
110+
df2 = DataFrame()
111+
result = df1.append(df2)
112+
expected = df1.copy()
113+
tm.assert_frame_equal(result, expected)
114+
115+
# Non-Empty df with columns append empty df
116+
df1 = DataFrame(np.random.randn(5, 2), columns=["bar", "foo"])
117+
df2 = DataFrame()
118+
result = df1.append(df2)
119+
expected = df1.copy()
120+
tm.assert_frame_equal(result, expected)
121+
122+
def test_append_dtypes(self):
123+
124+
# GH 5754
125+
# row appends of different dtypes (so need to do by-item)
126+
# can sometimes infer the correct type
127+
128+
df1 = DataFrame({"bar": Timestamp("20130101")}, index=range(5))
129+
df2 = DataFrame()
130+
result = df1.append(df2)
131+
expected = df1.copy()
132+
tm.assert_frame_equal(result, expected)
133+
134+
df1 = DataFrame({"bar": Timestamp("20130101")}, index=range(1))
135+
df2 = DataFrame({"bar": "foo"}, index=range(1, 2))
136+
result = df1.append(df2)
137+
expected = DataFrame({"bar": [Timestamp("20130101"), "foo"]})
138+
tm.assert_frame_equal(result, expected)
139+
140+
df1 = DataFrame({"bar": Timestamp("20130101")}, index=range(1))
141+
df2 = DataFrame({"bar": np.nan}, index=range(1, 2))
142+
result = df1.append(df2)
143+
expected = DataFrame(
144+
{"bar": Series([Timestamp("20130101"), np.nan], dtype="M8[ns]")}
145+
)
146+
tm.assert_frame_equal(result, expected)
147+
148+
df1 = DataFrame({"bar": Timestamp("20130101")}, index=range(1))
149+
df2 = DataFrame({"bar": np.nan}, index=range(1, 2), dtype=object)
150+
result = df1.append(df2)
151+
expected = DataFrame(
152+
{"bar": Series([Timestamp("20130101"), np.nan], dtype="M8[ns]")}
153+
)
154+
tm.assert_frame_equal(result, expected)
155+
156+
df1 = DataFrame({"bar": np.nan}, index=range(1))
157+
df2 = DataFrame({"bar": Timestamp("20130101")}, index=range(1, 2))
158+
result = df1.append(df2)
159+
expected = DataFrame(
160+
{"bar": Series([np.nan, Timestamp("20130101")], dtype="M8[ns]")}
161+
)
162+
tm.assert_frame_equal(result, expected)
163+
164+
df1 = DataFrame({"bar": Timestamp("20130101")}, index=range(1))
165+
df2 = DataFrame({"bar": 1}, index=range(1, 2), dtype=object)
166+
result = df1.append(df2)
167+
expected = DataFrame({"bar": Series([Timestamp("20130101"), 1])})
168+
tm.assert_frame_equal(result, expected)
169+
170+
@pytest.mark.parametrize(
171+
"timestamp", ["2019-07-19 07:04:57+0100", "2019-07-19 07:04:57"]
172+
)
173+
def test_append_timestamps_aware_or_naive(self, tz_naive_fixture, timestamp):
174+
# GH 30238
175+
tz = tz_naive_fixture
176+
df = pd.DataFrame([pd.Timestamp(timestamp, tz=tz)])
177+
result = df.append(df.iloc[0]).iloc[-1]
178+
expected = pd.Series(pd.Timestamp(timestamp, tz=tz), name=0)
179+
tm.assert_series_equal(result, expected)

pandas/tests/frame/methods/test_cov_corr.py

+5-22
Original file line numberDiff line numberDiff line change
@@ -62,32 +62,15 @@ def test_cov(self, float_frame, float_string_frame):
6262
class TestDataFrameCorr:
6363
# DataFrame.corr(), as opposed to DataFrame.corrwith
6464

65-
@staticmethod
66-
def _check_method(frame, method="pearson"):
67-
correls = frame.corr(method=method)
68-
expected = frame["A"].corr(frame["C"], method=method)
69-
tm.assert_almost_equal(correls["A"]["C"], expected)
70-
71-
@td.skip_if_no_scipy
72-
def test_corr_pearson(self, float_frame):
73-
float_frame["A"][:5] = np.nan
74-
float_frame["B"][5:10] = np.nan
75-
76-
self._check_method(float_frame, "pearson")
77-
65+
@pytest.mark.parametrize("method", ["pearson", "kendall", "spearman"])
7866
@td.skip_if_no_scipy
79-
def test_corr_kendall(self, float_frame):
67+
def test_corr_scipy_method(self, float_frame, method):
8068
float_frame["A"][:5] = np.nan
8169
float_frame["B"][5:10] = np.nan
8270

83-
self._check_method(float_frame, "kendall")
84-
85-
@td.skip_if_no_scipy
86-
def test_corr_spearman(self, float_frame):
87-
float_frame["A"][:5] = np.nan
88-
float_frame["B"][5:10] = np.nan
89-
90-
self._check_method(float_frame, "spearman")
71+
correls = float_frame.corr(method=method)
72+
expected = float_frame["A"].corr(float_frame["C"], method=method)
73+
tm.assert_almost_equal(correls["A"]["C"], expected)
9174

9275
# ---------------------------------------------------------------------
9376

pandas/tests/frame/methods/test_rank.py

+9
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,15 @@ def test_rank2(self):
113113
exp = DataFrame({"a": [3.5, 1.0, 3.5, 5.0, 6.0, 7.0, 2.0]})
114114
tm.assert_frame_equal(df.rank(), exp)
115115

116+
def test_rank_does_not_mutate(self):
117+
# GH#18521
118+
# Check rank does not mutate DataFrame
119+
df = DataFrame(np.random.randn(10, 3), dtype="float64")
120+
expected = df.copy()
121+
df.rank()
122+
result = df
123+
tm.assert_frame_equal(result, expected)
124+
116125
def test_rank_mixed_frame(self, float_string_frame):
117126
float_string_frame["datetime"] = datetime.now()
118127
float_string_frame["timedelta"] = timedelta(days=1, seconds=1)

pandas/tests/frame/test_analytics.py

-9
Original file line numberDiff line numberDiff line change
@@ -1248,15 +1248,6 @@ def test_matmul(self):
12481248
# ---------------------------------------------------------------------
12491249
# Unsorted
12501250

1251-
def test_series_nat_conversion(self):
1252-
# GH 18521
1253-
# Check rank does not mutate DataFrame
1254-
df = DataFrame(np.random.randn(10, 3), dtype="float64")
1255-
expected = df.copy()
1256-
df.rank()
1257-
result = df
1258-
tm.assert_frame_equal(result, expected)
1259-
12601251
def test_series_broadcasting(self):
12611252
# smoke test for numpy warnings
12621253
# GH 16378, GH 16306

0 commit comments

Comments
 (0)