@@ -57,129 +57,61 @@ def test_replace_inplace(self, datetime_frame, float_string_frame):
57
57
assert return_value is None
58
58
tm .assert_frame_equal (tsframe , datetime_frame .fillna (0 ))
59
59
60
- def test_regex_replace_list_obj (self ):
61
- obj = {"a" : list ("ab.." ), "b" : list ("efgh" ), "c" : list ("helo" )}
62
- dfobj = DataFrame (obj )
63
-
64
- # lists of regexes and values
65
- # list of [re1, re2, ..., reN] -> [v1, v2, ..., vN]
66
- to_replace_res = [r"\s*\.\s*" , r"e|f|g" ]
67
- values = [np .nan , "crap" ]
68
- res = dfobj .replace (to_replace_res , values , regex = True )
69
- expec = DataFrame (
70
- {
71
- "a" : ["a" , "b" , np .nan , np .nan ],
72
- "b" : ["crap" ] * 3 + ["h" ],
73
- "c" : ["h" , "crap" , "l" , "o" ],
74
- }
75
- )
76
- tm .assert_frame_equal (res , expec )
77
-
78
- # list of [re1, re2, ..., reN] -> [re1, re2, .., reN]
79
- to_replace_res = [r"\s*(\.)\s*" , r"(e|f|g)" ]
80
- values = [r"\1\1" , r"\1_crap" ]
81
- res = dfobj .replace (to_replace_res , values , regex = True )
82
- expec = DataFrame (
83
- {
84
- "a" : ["a" , "b" , ".." , ".." ],
85
- "b" : ["e_crap" , "f_crap" , "g_crap" , "h" ],
86
- "c" : ["h" , "e_crap" , "l" , "o" ],
87
- }
88
- )
89
- tm .assert_frame_equal (res , expec )
90
-
91
- # list of [re1, re2, ..., reN] -> [(re1 or v1), (re2 or v2), ..., (reN
92
- # or vN)]
93
- to_replace_res = [r"\s*(\.)\s*" , r"e" ]
94
- values = [r"\1\1" , r"crap" ]
95
- res = dfobj .replace (to_replace_res , values , regex = True )
96
- expec = DataFrame (
97
- {
98
- "a" : ["a" , "b" , ".." , ".." ],
99
- "b" : ["crap" , "f" , "g" , "h" ],
100
- "c" : ["h" , "crap" , "l" , "o" ],
101
- }
102
- )
103
- tm .assert_frame_equal (res , expec )
104
-
105
- to_replace_res = [r"\s*(\.)\s*" , r"e" ]
106
- values = [r"\1\1" , r"crap" ]
107
- res = dfobj .replace (value = values , regex = to_replace_res )
108
- expec = DataFrame (
109
- {
110
- "a" : ["a" , "b" , ".." , ".." ],
111
- "b" : ["crap" , "f" , "g" , "h" ],
112
- "c" : ["h" , "crap" , "l" , "o" ],
113
- }
114
- )
115
- tm .assert_frame_equal (res , expec )
116
-
117
- def test_regex_replace_list_obj_inplace (self ):
118
- # same as above with inplace=True
119
- # lists of regexes and values
120
- obj = {"a" : list ("ab.." ), "b" : list ("efgh" ), "c" : list ("helo" )}
121
- dfobj = DataFrame (obj )
122
-
123
- # lists of regexes and values
124
- # list of [re1, re2, ..., reN] -> [v1, v2, ..., vN]
125
- to_replace_res = [r"\s*\.\s*" , r"e|f|g" ]
126
- values = [np .nan , "crap" ]
127
- res = dfobj .copy ()
128
- return_value = res .replace (to_replace_res , values , inplace = True , regex = True )
129
- assert return_value is None
130
- expec = DataFrame (
131
- {
132
- "a" : ["a" , "b" , np .nan , np .nan ],
133
- "b" : ["crap" ] * 3 + ["h" ],
134
- "c" : ["h" , "crap" , "l" , "o" ],
135
- }
136
- )
137
- tm .assert_frame_equal (res , expec )
60
+ @pytest .mark .parametrize (
61
+ "to_replace,values,expected" ,
62
+ [
63
+ # lists of regexes and values
64
+ # list of [re1, re2, ..., reN] -> [v1, v2, ..., vN]
65
+ (
66
+ [r"\s*\.\s*" , r"e|f|g" ],
67
+ [np .nan , "crap" ],
68
+ {
69
+ "a" : ["a" , "b" , np .nan , np .nan ],
70
+ "b" : ["crap" ] * 3 + ["h" ],
71
+ "c" : ["h" , "crap" , "l" , "o" ],
72
+ },
73
+ ),
74
+ # list of [re1, re2, ..., reN] -> [re1, re2, .., reN]
75
+ (
76
+ [r"\s*(\.)\s*" , r"(e|f|g)" ],
77
+ [r"\1\1" , r"\1_crap" ],
78
+ {
79
+ "a" : ["a" , "b" , ".." , ".." ],
80
+ "b" : ["e_crap" , "f_crap" , "g_crap" , "h" ],
81
+ "c" : ["h" , "e_crap" , "l" , "o" ],
82
+ },
83
+ ),
84
+ # list of [re1, re2, ..., reN] -> [(re1 or v1), (re2 or v2), ..., (reN
85
+ # or vN)]
86
+ (
87
+ [r"\s*(\.)\s*" , r"e" ],
88
+ [r"\1\1" , r"crap" ],
89
+ {
90
+ "a" : ["a" , "b" , ".." , ".." ],
91
+ "b" : ["crap" , "f" , "g" , "h" ],
92
+ "c" : ["h" , "crap" , "l" , "o" ],
93
+ },
94
+ ),
95
+ ],
96
+ )
97
+ @pytest .mark .parametrize ("inplace" , [True , False ])
98
+ @pytest .mark .parametrize ("use_value_regex_args" , [True , False ])
99
+ def test_regex_replace_list_obj (
100
+ self , to_replace , values , expected , inplace , use_value_regex_args
101
+ ):
102
+ df = DataFrame ({"a" : list ("ab.." ), "b" : list ("efgh" ), "c" : list ("helo" )})
138
103
139
- # list of [re1, re2, ..., reN] -> [re1, re2, .., reN]
140
- to_replace_res = [r"\s*(\.)\s*" , r"(e|f|g)" ]
141
- values = [r"\1\1" , r"\1_crap" ]
142
- res = dfobj .copy ()
143
- return_value = res .replace (to_replace_res , values , inplace = True , regex = True )
144
- assert return_value is None
145
- expec = DataFrame (
146
- {
147
- "a" : ["a" , "b" , ".." , ".." ],
148
- "b" : ["e_crap" , "f_crap" , "g_crap" , "h" ],
149
- "c" : ["h" , "e_crap" , "l" , "o" ],
150
- }
151
- )
152
- tm .assert_frame_equal (res , expec )
104
+ if use_value_regex_args :
105
+ result = df .replace (value = values , regex = to_replace , inplace = inplace )
106
+ else :
107
+ result = df .replace (to_replace , values , regex = True , inplace = inplace )
153
108
154
- # list of [re1, re2, ..., reN] -> [(re1 or v1), (re2 or v2), ..., (reN
155
- # or vN)]
156
- to_replace_res = [r"\s*(\.)\s*" , r"e" ]
157
- values = [r"\1\1" , r"crap" ]
158
- res = dfobj .copy ()
159
- return_value = res .replace (to_replace_res , values , inplace = True , regex = True )
160
- assert return_value is None
161
- expec = DataFrame (
162
- {
163
- "a" : ["a" , "b" , ".." , ".." ],
164
- "b" : ["crap" , "f" , "g" , "h" ],
165
- "c" : ["h" , "crap" , "l" , "o" ],
166
- }
167
- )
168
- tm .assert_frame_equal (res , expec )
109
+ if inplace :
110
+ assert result is None
111
+ result = df
169
112
170
- to_replace_res = [r"\s*(\.)\s*" , r"e" ]
171
- values = [r"\1\1" , r"crap" ]
172
- res = dfobj .copy ()
173
- return_value = res .replace (value = values , regex = to_replace_res , inplace = True )
174
- assert return_value is None
175
- expec = DataFrame (
176
- {
177
- "a" : ["a" , "b" , ".." , ".." ],
178
- "b" : ["crap" , "f" , "g" , "h" ],
179
- "c" : ["h" , "crap" , "l" , "o" ],
180
- }
181
- )
182
- tm .assert_frame_equal (res , expec )
113
+ expected = DataFrame (expected )
114
+ tm .assert_frame_equal (result , expected )
183
115
184
116
def test_regex_replace_list_mixed (self , mix_ab ):
185
117
# mixed frame to make sure this doesn't break things
0 commit comments