如何修改字典内的dataframe内容,同时保留原dataframe的实例引用
实现方法
你需要原地修改df实例的内部数据,不要直接替换变量引用,具体操作如下:
核心实现代码
你可以使用pandas的切片赋值语法原地修改数据,该操作不会改变df的内存地址(即实例ID保持不变):
# 原地替换df的全部数据,实例ID不变 df[:] = new_df.copy()
原操作问题说明
你之前执行my_dfs['first'] = new_df.copy()时,只是修改了字典my_dfs中first键对应的引用指向,原df实例本身没有任何修改,因此打印df时还是旧数据。
而使用切片赋值df[:] = new_df时,是直接修改df实例内部存储的数据,原实例ID不会发生变化,同时字典中my_dfs['first']因为原本就指向df实例,也会同步更新为新内容。
验证示例
你可以通过以下代码验证效果:
import pandas as pd df = pd.read_csv('my-data.csv') new_df = pd.read_csv('new-data.csv') my_dfs = {'first': df } # 打印修改前的实例ID print("修改前df的ID:", id(df)) # 打印修改前df的内容 print("修改前df内容:\n", df) # 原地修改df内容 df[:] = new_df.copy() # 打印修改后的实例ID,和修改前完全一致 print("修改后df的ID:", id(df)) # 验证内容已经同步为new_df的内容 print("df与new_df内容是否一致:", df.equals(new_df)) # 验证字典中的内容也同步更新 print("my_dfs['first']与new_df内容是否一致:", my_dfs['first'].equals(new_df))
特殊场景处理
如果需要同时替换df的索引、列名等全部属性,完全对齐new_df的结构,可以使用以下写法:
# 清空原有数据,对齐行列结构后全量赋值,全程原地修改 df.drop(df.index, inplace=True) df.columns = new_df.columns df.index = new_df.index df[:] = new_df.copy()
内容的提问来源于stack exchange,提问作者alexx0186
相关产品推荐
相关产品推荐

