Skip to content

Commit a2721fd

Browse files
authored
Raise error in read_csv when arguments header and prefix both are not None (#31383)
Closes #27394
1 parent a9d2450 commit a2721fd

File tree

3 files changed

+27
-11
lines changed

3 files changed

+27
-11
lines changed

doc/source/whatsnew/v1.1.0.rst

+1
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,7 @@ MultiIndex
177177
I/O
178178
^^^
179179
- Bug in :meth:`read_json` where integer overflow was occuring when json contains big number strings. (:issue:`30320`)
180+
- `read_csv` will now raise a ``ValueError`` when the arguments `header` and `prefix` both are not `None`. (:issue:`27394`)
180181
- Bug in :meth:`DataFrame.to_json` was raising ``NotFoundError`` when ``path_or_buf`` was an S3 URI (:issue:`28375`)
181182
-
182183

pandas/io/parsers.py

+15-11
Original file line numberDiff line numberDiff line change
@@ -1399,17 +1399,21 @@ def __init__(self, kwds):
13991399
"index_col must only contain row numbers "
14001400
"when specifying a multi-index header"
14011401
)
1402-
1403-
# GH 16338
1404-
elif self.header is not None and not is_integer(self.header):
1405-
raise ValueError("header must be integer or list of integers")
1406-
1407-
# GH 27779
1408-
elif self.header is not None and self.header < 0:
1409-
raise ValueError(
1410-
"Passing negative integer to header is invalid. "
1411-
"For no header, use header=None instead"
1412-
)
1402+
elif self.header is not None:
1403+
# GH 27394
1404+
if self.prefix is not None:
1405+
raise ValueError(
1406+
"Argument prefix must be None if argument header is not None"
1407+
)
1408+
# GH 16338
1409+
elif not is_integer(self.header):
1410+
raise ValueError("header must be integer or list of integers")
1411+
# GH 27779
1412+
elif self.header < 0:
1413+
raise ValueError(
1414+
"Passing negative integer to header is invalid. "
1415+
"For no header, use header=None instead"
1416+
)
14131417

14141418
self._name_processed = False
14151419

pandas/tests/io/parser/test_common.py

+11
Original file line numberDiff line numberDiff line change
@@ -2040,6 +2040,17 @@ def test_read_csv_memory_growth_chunksize(all_parsers):
20402040
pass
20412041

20422042

2043+
def test_read_csv_raises_on_header_prefix(all_parsers):
2044+
# gh-27394
2045+
parser = all_parsers
2046+
msg = "Argument prefix must be None if argument header is not None"
2047+
2048+
s = StringIO("0,1\n2,3")
2049+
2050+
with pytest.raises(ValueError, match=msg):
2051+
parser.read_csv(s, header=0, prefix="_X")
2052+
2053+
20432054
def test_read_table_equivalency_to_read_csv(all_parsers):
20442055
# see gh-21948
20452056
# As of 0.25.0, read_table is undeprecated

0 commit comments

Comments
 (0)