@@ -245,13 +245,14 @@ def update(
245245 if id_column not in changes .columns :
246246 raise ValueError (f"id_column '{ id_column } ' not found in DataFrame columns" )
247247
248- ids = changes [id_column ].tolist ()
249- invalid = [i for i , v in enumerate (ids ) if not isinstance (v , str ) or not v .strip ()]
248+ raw_ids = changes [id_column ].tolist ()
249+ invalid = [changes . index [ i ] for i , v in enumerate (raw_ids ) if not isinstance (v , str ) or not v .strip ()]
250250 if invalid :
251251 raise ValueError (
252252 f"id_column '{ id_column } ' contains invalid values at row index(es) { invalid } . "
253253 "All IDs must be non-empty strings."
254254 )
255+ ids = [v .strip () for v in raw_ids ]
255256
256257 change_columns = [column for column in changes .columns if column != id_column ]
257258 if not change_columns :
@@ -260,10 +261,18 @@ def update(
260261 )
261262 change_list = dataframe_to_records (changes [change_columns ], na_as_null = clear_nulls )
262263
263- if len (ids ) == 1 :
264- self ._client .records .update (table , ids [0 ], change_list [0 ])
264+ # Filter out rows where all change values were NaN/None (empty dicts)
265+ paired = [(rid , patch ) for rid , patch in zip (ids , change_list ) if patch ]
266+ if not paired :
267+ return
268+ ids_filtered , change_filtered = zip (* paired )
269+ ids_filtered = list (ids_filtered )
270+ change_filtered = list (change_filtered )
271+
272+ if len (ids_filtered ) == 1 :
273+ self ._client .records .update (table , ids_filtered [0 ], change_filtered [0 ])
265274 else :
266- self ._client .records .update (table , ids , change_list )
275+ self ._client .records .update (table , ids_filtered , change_filtered )
267276
268277 # ----------------------------------------------------------------- delete
269278
@@ -299,15 +308,16 @@ def delete(
299308 if not isinstance (ids , pd .Series ):
300309 raise TypeError ("ids must be a pandas Series" )
301310
302- id_list = ids .tolist ()
303- if not id_list :
311+ raw_list = ids .tolist ()
312+ if not raw_list :
304313 return None
305314
306- invalid = [i for i , v in enumerate (id_list ) if not isinstance (v , str ) or not v .strip ()]
315+ invalid = [ids . index [ i ] for i , v in enumerate (raw_list ) if not isinstance (v , str ) or not v .strip ()]
307316 if invalid :
308317 raise ValueError (
309318 f"ids Series contains invalid values at index(es) { invalid } . " "All IDs must be non-empty strings."
310319 )
320+ id_list = [v .strip () for v in raw_list ]
311321
312322 if len (id_list ) == 1 :
313323 self ._client .records .delete (table , id_list [0 ])
0 commit comments