Skip to content

Commit f7d00cd

Browse files
author
Trevor Bye
committed
changes to set_index to preserve dtype from field
1 parent 8514a35 commit f7d00cd

File tree

2 files changed

+8
-3
lines changed

2 files changed

+8
-3
lines changed

pandas/core/frame.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4249,6 +4249,7 @@ def set_index(
42494249
"one-dimensional arrays."
42504250
)
42514251

4252+
current_dtype = None
42524253
missing: List[Optional[Hashable]] = []
42534254
for col in keys:
42544255
if isinstance(
@@ -4262,6 +4263,9 @@ def set_index(
42624263
# everything else gets tried as a key; see GH 24969
42634264
try:
42644265
found = col in self.columns
4266+
if found:
4267+
# get current dtype to preserve through index creation
4268+
current_dtype = self.dtypes.get(col).type
42654269
except TypeError:
42664270
raise TypeError(f"{err_msg}. Received column of type {type(col)}")
42674271
else:
@@ -4317,7 +4321,7 @@ def set_index(
43174321
f"received array of length {len(arrays[-1])}"
43184322
)
43194323

4320-
index = ensure_index_from_sequences(arrays, names)
4324+
index = ensure_index_from_sequences(arrays, names, current_dtype)
43214325

43224326
if verify_integrity and not index.is_unique:
43234327
duplicates = index[index.duplicated()].unique()

pandas/core/indexes/base.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5238,7 +5238,7 @@ def shape(self):
52385238
Index._add_comparison_methods()
52395239

52405240

5241-
def ensure_index_from_sequences(sequences, names=None):
5241+
def ensure_index_from_sequences(sequences, names=None, dtype=None):
52425242
"""
52435243
Construct an index from sequences of data.
52445244
@@ -5249,6 +5249,7 @@ def ensure_index_from_sequences(sequences, names=None):
52495249
----------
52505250
sequences : sequence of sequences
52515251
names : sequence of str
5252+
dtype : NumPy dtype
52525253
52535254
Returns
52545255
-------
@@ -5274,7 +5275,7 @@ def ensure_index_from_sequences(sequences, names=None):
52745275
if len(sequences) == 1:
52755276
if names is not None:
52765277
names = names[0]
5277-
return Index(sequences[0], name=names)
5278+
return Index(sequences[0], name=names, dtype=dtype)
52785279
else:
52795280
return MultiIndex.from_arrays(sequences, names=names)
52805281

0 commit comments

Comments
 (0)