@@ -3540,6 +3540,64 @@ def test_pass_dtype(self):
3540
3540
self .assertEqual (result ['one' ].dtype , 'u1' )
3541
3541
self .assertEqual (result ['two' ].dtype , 'S1' )
3542
3542
3543
+ def test_empty_pass_dtype (self ):
3544
+ data = 'one,two'
3545
+ result = self .read_csv (StringIO (data ), dtype = {'one' : 'u1' })
3546
+
3547
+ expected = DataFrame ({'one' : np .empty (0 , dtype = 'u1' ),
3548
+ 'two' : np .empty (0 , dtype = np .object )})
3549
+ tm .assert_frame_equal (result , expected )
3550
+
3551
+ def test_empty_with_index_pass_dtype (self ):
3552
+ data = 'one,two'
3553
+ result = self .read_csv (StringIO (data ), index_col = ['one' ],
3554
+ dtype = {'one' : 'u1' , 1 : 'f' })
3555
+
3556
+ expected = DataFrame ({'two' : np .empty (0 , dtype = 'f' )},
3557
+ index = Index ([], dtype = 'u1' , name = 'one' ))
3558
+ tm .assert_frame_equal (result , expected )
3559
+
3560
+ def test_empty_with_multiindex_pass_dtype (self ):
3561
+ data = 'one,two,three'
3562
+ result = self .read_csv (StringIO (data ), index_col = ['one' , 'two' ],
3563
+ dtype = {'one' : 'u1' , 1 : 'f8' })
3564
+
3565
+ expected = DataFrame ({'three' : np .empty (0 , dtype = np .object )}, index = MultiIndex .from_arrays (
3566
+ [np .empty (0 , dtype = 'u1' ), np .empty (0 , dtype = 'O' )],
3567
+ names = ['one' , 'two' ])
3568
+ )
3569
+ tm .assert_frame_equal (result , expected )
3570
+
3571
+ def test_empty_with_mangled_column_pass_dtype_by_names (self ):
3572
+ data = 'one,one'
3573
+ result = self .read_csv (StringIO (data ), dtype = {'one' : 'u1' , 'one.1' : 'f' })
3574
+
3575
+ expected = DataFrame ({'one' : np .empty (0 , dtype = 'u1' ), 'one.1' : np .empty (0 , dtype = 'f' )})
3576
+ tm .assert_frame_equal (result , expected )
3577
+
3578
+ def test_empty_with_mangled_column_pass_dtype_by_indexes (self ):
3579
+ data = 'one,one'
3580
+ result = self .read_csv (StringIO (data ), dtype = {0 : 'u1' , 1 : 'f' })
3581
+
3582
+ expected = DataFrame ({'one' : np .empty (0 , dtype = 'u1' ), 'one.1' : np .empty (0 , dtype = 'f' )})
3583
+ tm .assert_frame_equal (result , expected )
3584
+
3585
+ def test_empty_with_dup_column_pass_dtype_by_names (self ):
3586
+ data = 'one,one'
3587
+ result = self .read_csv (StringIO (data ), mangle_dupe_cols = False , dtype = {'one' : 'u1' })
3588
+ expected = pd .concat ([Series ([], name = 'one' , dtype = 'u1' )] * 2 , axis = 1 )
3589
+ tm .assert_frame_equal (result , expected )
3590
+
3591
+ def test_empty_with_dup_column_pass_dtype_by_indexes (self ):
3592
+ ### FIXME in GH9424
3593
+ raise nose .SkipTest ("GH 9424; known failure read_csv with duplicate columns" )
3594
+
3595
+ data = 'one,one'
3596
+ result = self .read_csv (StringIO (data ), mangle_dupe_cols = False , dtype = {0 : 'u1' , 1 : 'f' })
3597
+ expected = pd .concat ([Series ([], name = 'one' , dtype = 'u1' ),
3598
+ Series ([], name = 'one' , dtype = 'f' )], axis = 1 )
3599
+ tm .assert_frame_equal (result , expected )
3600
+
3543
3601
def test_usecols_dtypes (self ):
3544
3602
data = """\
3545
3603
1,2,3
0 commit comments