Skip to content

Commit 8f150e5

Browse files
authored
REF: ensure to_arrays returns matched-length arrays/columns (#43099)
1 parent 252a97a commit 8f150e5

File tree

2 files changed

+19
-0
lines changed

2 files changed

+19
-0
lines changed

pandas/core/frame.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2323,6 +2323,8 @@ def _from_arrays(
23232323

23242324
manager = get_option("mode.data_manager")
23252325
columns = ensure_index(columns)
2326+
if len(columns) != len(arrays):
2327+
raise ValueError("len(columns) must match len(arrays)")
23262328
mgr = arrays_to_mgr(
23272329
arrays,
23282330
columns,

pandas/core/internals/construction.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -433,6 +433,7 @@ def dict_to_mgr(
433433
arrays.loc[missing] = [val] * missing.sum()
434434

435435
arrays = list(arrays)
436+
data_names = ensure_index(columns)
436437

437438
else:
438439
keys = list(data.keys())
@@ -738,6 +739,17 @@ def to_arrays(
738739
) -> tuple[list[ArrayLike], Index]:
739740
"""
740741
Return list of arrays, columns.
742+
743+
Returns
744+
-------
745+
list[ArrayLike]
746+
These will become columns in a DataFrame.
747+
Index
748+
This will become frame.columns.
749+
750+
Notes
751+
-----
752+
Ensures that len(result_arrays) == len(result_index).
741753
"""
742754
if isinstance(data, ABCDataFrame):
743755
# see test_from_records_with_index_data, test_from_records_bad_index_column
@@ -783,6 +795,11 @@ def to_arrays(
783795
)
784796
if columns is None:
785797
columns = ibase.default_index(len(data))
798+
elif len(columns) > len(data):
799+
raise ValueError("len(columns) > len(data)")
800+
elif len(columns) < len(data):
801+
# doing this here is akin to a pre-emptive reindex
802+
data = data[: len(columns)]
786803
return data, columns
787804

788805
elif isinstance(data, np.ndarray) and data.dtype.names is not None:

0 commit comments

Comments
 (0)