Skip to content

Commit 3bcc95f

Browse files
authored
PERF: Use shallow copies/defer copies in io (#58960)
1 parent 0fb5cfe commit 3bcc95f

File tree

3 files changed

+10
-6
lines changed

3 files changed

+10
-6
lines changed

pandas/io/json/_json.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -369,18 +369,22 @@ def __init__(
369369
msg = "Overlapping names between the index and columns"
370370
raise ValueError(msg)
371371

372-
obj = obj.copy()
373372
timedeltas = obj.select_dtypes(include=["timedelta"]).columns
373+
copied = False
374374
if len(timedeltas):
375+
obj = obj.copy()
376+
copied = True
375377
obj[timedeltas] = obj[timedeltas].map(lambda x: x.isoformat())
376-
# Convert PeriodIndex to datetimes before serializing
377-
if isinstance(obj.index.dtype, PeriodDtype):
378-
obj.index = obj.index.to_timestamp()
379378

380379
# exclude index from obj if index=False
381380
if not self.index:
382381
self.obj = obj.reset_index(drop=True)
383382
else:
383+
# Convert PeriodIndex to datetimes before serializing
384+
if isinstance(obj.index.dtype, PeriodDtype):
385+
if not copied:
386+
obj = obj.copy(deep=False)
387+
obj.index = obj.index.to_timestamp()
384388
self.obj = obj.reset_index(drop=False)
385389
self.date_format = "iso"
386390
self.orient = "records"

pandas/io/json/_table_schema.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ def set_default_names(data):
114114
)
115115
return data
116116

117-
data = data.copy()
117+
data = data.copy(deep=False)
118118
if data.index.nlevels > 1:
119119
data.index.names = com.fill_missing_names(data.index.names)
120120
else:

pandas/io/sql.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1014,7 +1014,7 @@ def _execute_insert_multi(self, conn, keys: list[str], data_iter) -> int:
10141014

10151015
def insert_data(self) -> tuple[list[str], list[np.ndarray]]:
10161016
if self.index is not None:
1017-
temp = self.frame.copy()
1017+
temp = self.frame.copy(deep=False)
10181018
temp.index.names = self.index
10191019
try:
10201020
temp.reset_index(inplace=True)

0 commit comments

Comments
 (0)