如何高效替换列表中18000个DataFrame指定列的0值为空字符串?
批量替换DataFrame列值的高效优化方案
手里有个包含约18000个DataFrame的列表,需要把每个DF里"Position"列的所有0值替换成空字符串,原代码是这样的:
for df_player in list_all_dfs: df_player["Position"] = df_player["Position"].replace(0, "")
给你几个提速的思路:
用
mask()替代replace():replace()会做全局匹配查找,而mask()直接基于布尔条件替换,单一值替换场景下效率更高:for df_player in list_all_dfs: df_player["Position"] = df_player["Position"].mask(df_player["Position"] == 0, "")用
loc原地修改:避免生成新的Series对象,直接在原DataFrame上操作,既省内存又提速度:target_col = "Position" for df_player in list_all_dfs: df_player.loc[df_player[target_col] == 0, target_col] = ""合并后批量处理(适合结构一致的DF):如果所有DataFrame的列结构完全相同,可以先合并成一个大DF做一次替换,再拆分回列表,利用pandas向量化处理的优势:
import pandas as pd # 合并时加个标识列区分每个原DF combined_df = pd.concat([df.assign(df_idx=i) for i, df in enumerate(list_all_dfs)], ignore_index=True) # 批量替换 combined_df["Position"] = combined_df["Position"].mask(combined_df["Position"] == 0, "") # 拆分回原列表 list_all_dfs = [group.drop("df_idx", axis=1) for _, group in combined_df.groupby("df_idx")]注意:这种方式要考虑总数据量的内存占用,如果单个DF数据都很大,合并后可能内存吃不消,适合大量小DF的场景。
内容的提问来源于stack exchange,提问作者MKJ
相关产品推荐
相关产品推荐

