@@ -620,3 +620,36 @@ def test_read_csv_multi_header_length_check(all_parsers):
620620 ParserError , match = "Header rows must have an equal number of columns."
621621 ):
622622 parser .read_csv (StringIO (case ), header = [0 , 2 ])
623+
624+
625+ @skip_pyarrow
626+ def test_header_none_and_implicit_index (all_parsers ):
627+ # GH#22144
628+ parser = all_parsers
629+ data = "x,1,5\n y,2\n z,3\n "
630+ result = parser .read_csv (StringIO (data ), names = ["a" , "b" ], header = None )
631+ expected = DataFrame (
632+ {"a" : [1 , 2 , 3 ], "b" : [5 , np .nan , np .nan ]}, index = ["x" , "y" , "z" ]
633+ )
634+ tm .assert_frame_equal (result , expected )
635+
636+
637+ @skip_pyarrow
638+ def test_header_none_and_implicit_index_in_second_row (all_parsers ):
639+ # GH#22144
640+ parser = all_parsers
641+ data = "x,1\n y,2,5\n z,3\n "
642+ with pytest .raises (ParserError , match = "Expected 2 fields in line 2, saw 3" ):
643+ parser .read_csv (StringIO (data ), names = ["a" , "b" ], header = None )
644+
645+
646+ @skip_pyarrow
647+ def test_header_none_and_on_bad_lines_skip (all_parsers ):
648+ # GH#22144
649+ parser = all_parsers
650+ data = "x,1\n y,2,5\n z,3\n "
651+ result = parser .read_csv (
652+ StringIO (data ), names = ["a" , "b" ], header = None , on_bad_lines = "skip"
653+ )
654+ expected = DataFrame ({"a" : ["x" , "z" ], "b" : [1 , 3 ]})
655+ tm .assert_frame_equal (result , expected )
0 commit comments