如何在Pandas DataFrame中替换指定行值且不改动其他数据?
解决Pandas DataFrame特定行值替换而非新增行的问题
看起来你现在的问题核心是直接往文件里追加数据导致新增行,而没有先在DataFrame内部完成值的替换,再整体写入文件。我给你拆解下解决方案:
第一步:在内存中修改DataFrame的指定行值
你需要先针对df1(或者你处理后的df_s)完成目标行的Count值更新,而不是直接操作文件。这里有两种常用方法:
方法1:用.loc精准定位修改
适合单个或少量行的修改:
# 假设你的原始数据存在df1中 # 修改'case'对应的Count为80 df1.loc[df1['Table'] == 'case', 'Count'] = 80 # 修改'consumer'对应的Count为150 df1.loc[df1['Table'] == 'consumer', 'Count'] = 150
方法2:用字典批量映射修改
如果需要更新的行比较多,用字典映射更高效:
# 定义要更新的键值对:Table名称 -> 新Count值 update_mapping = {'case': 80, 'consumer': 150} # 用map匹配新值,没有匹配到的保留原Count值 df1['Count'] = df1['Table'].map(update_mapping).fillna(df1['Count'])
第二步:将修改后的DataFrame写入文件(覆盖而非追加)
你之前的代码用了mode='a'(追加模式),这会把新数据直接加到文件末尾,自然会出现新增行。正确的做法是直接覆盖整个文件,因为你已经在内存中完成了所有数据的修改:
import os file_path = '/medaff/Scripts/python/count.txt' # 直接写入修改后的df1,覆盖原文件 df1.to_csv(file_path, sep='|', index=False)
特殊情况:如果df_s是仅包含更新行的小DataFrame
如果你的df_s是单独生成的、只包含case和consumer新值的DataFrame,那需要先把它和原文件的DataFrame合并更新,再写入:
import pandas as pd import os file_path = '/medaff/Scripts/python/count.txt' if os.path.isfile(file_path): # 读取原文件的完整数据 df1 = pd.read_csv(file_path, sep='|') # 将两个DataFrame都以Table列为索引,方便更新 df1.set_index('Table', inplace=True) df_s.set_index('Table', inplace=True) # 用df_s的新值覆盖df1中对应行的Count df1.update(df_s) # 恢复索引为普通列 df1.reset_index(inplace=True) # 写入更新后的完整数据 df1.to_csv(file_path, sep='|', index=False)
这样操作后,你的文件里就只会保留修改后的完整数据,不会出现新增行啦。
内容的提问来源于stack exchange,提问作者shivam
相关产品推荐
相关产品推荐

