@@ -226,3 +226,49 @@ def test_dtype_with_converter(self):
226226 converters = {'a' : lambda x : str (x )})
227227 expected = DataFrame ({'a' : ['1.1' , '1.2' ], 'b' : [2.2 , 2.3 ]})
228228 tm .assert_frame_equal (result , expected )
229+
230+ def test_empty_dtype (self ):
231+ # see gh-14712
232+ data = 'a,b'
233+
234+ expected = pd .DataFrame (columns = ['a' , 'b' ], dtype = np .float64 )
235+ result = self .read_csv (StringIO (data ), header = 0 , dtype = np .float64 )
236+ tm .assert_frame_equal (result , expected )
237+
238+ expected = pd .DataFrame ({'a' : pd .Categorical ([]),
239+ 'b' : pd .Categorical ([])},
240+ index = [])
241+ result = self .read_csv (StringIO (data ), header = 0 ,
242+ dtype = 'category' )
243+ tm .assert_frame_equal (result , expected )
244+
245+ expected = pd .DataFrame (columns = ['a' , 'b' ], dtype = 'datetime64[ns]' )
246+ result = self .read_csv (StringIO (data ), header = 0 ,
247+ dtype = 'datetime64[ns]' )
248+ tm .assert_frame_equal (result , expected )
249+
250+ expected = pd .DataFrame ({'a' : pd .Series ([], dtype = 'timedelta64[ns]' ),
251+ 'b' : pd .Series ([], dtype = 'timedelta64[ns]' )},
252+ index = [])
253+ result = self .read_csv (StringIO (data ), header = 0 ,
254+ dtype = 'timedelta64[ns]' )
255+ tm .assert_frame_equal (result , expected )
256+
257+ expected = pd .DataFrame (columns = ['a' , 'b' ])
258+ expected ['a' ] = expected ['a' ].astype (np .float64 )
259+ result = self .read_csv (StringIO (data ), header = 0 ,
260+ dtype = {'a' : np .float64 })
261+ tm .assert_frame_equal (result , expected )
262+
263+ expected = pd .DataFrame (columns = ['a' , 'b' ])
264+ expected ['a' ] = expected ['a' ].astype (np .float64 )
265+ result = self .read_csv (StringIO (data ), header = 0 ,
266+ dtype = {0 : np .float64 })
267+ tm .assert_frame_equal (result , expected )
268+
269+ expected = pd .DataFrame (columns = ['a' , 'b' ])
270+ expected ['a' ] = expected ['a' ].astype (np .int32 )
271+ expected ['b' ] = expected ['b' ].astype (np .float64 )
272+ result = self .read_csv (StringIO (data ), header = 0 ,
273+ dtype = {'a' : np .int32 , 1 : np .float64 })
274+ tm .assert_frame_equal (result , expected )
0 commit comments