From b32cff0064c78564b6048fcc246b1f7c6cbc2aec Mon Sep 17 00:00:00 2001 From: phofl Date: Fri, 21 Jan 2022 12:37:13 +0100 Subject: [PATCH] REGR: read_fwf interpreting infer as list of colspecs when checking names length --- pandas/io/parsers/readers.py | 2 +- pandas/tests/io/parser/test_read_fwf.py | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/pandas/io/parsers/readers.py b/pandas/io/parsers/readers.py index 6d60f94e89291..ef693fcbd3720 100644 --- a/pandas/io/parsers/readers.py +++ b/pandas/io/parsers/readers.py @@ -856,7 +856,7 @@ def read_fwf( # Ensure length of `colspecs` matches length of `names` names = kwds.get("names") if names is not None: - if len(names) != len(colspecs): + if len(names) != len(colspecs) and colspecs != "infer": # need to check len(index_col) as it might contain # unnamed indices, in which case it's name is not required len_index = 0 diff --git a/pandas/tests/io/parser/test_read_fwf.py b/pandas/tests/io/parser/test_read_fwf.py index 63f783b01d1f3..3de73e51ce6b6 100644 --- a/pandas/tests/io/parser/test_read_fwf.py +++ b/pandas/tests/io/parser/test_read_fwf.py @@ -920,3 +920,13 @@ def test_skiprows_passing_as_positional_deprecated(): result = read_fwf(StringIO(data), [(0, 2)]) expected = DataFrame({"0": [1, 2]}) tm.assert_frame_equal(result, expected) + + +def test_names_and_infer_colspecs(): + # GH#45337 + data = """X Y Z + 959.0 345 22.2 + """ + result = read_fwf(StringIO(data), skiprows=1, usecols=[0, 2], names=["a", "b"]) + expected = DataFrame({"a": [959.0], "b": 22.2}) + tm.assert_frame_equal(result, expected)