使用Pandas合并多份经济数据框时出现重复行问题
问题分析与解决方案
重复行原因
你用自定义函数合并通胀率时出现重复行,核心问题是第二次合并时遍历的是已经包含多指标行的merged_df的Country列——比如阿根廷在merged_df里已有GDP、失业率两行,遍历会触发两次函数调用,每次都把原有的阿根廷数据和通胀率数据拼接,最终导致原有行重复。
另外,你当前的自定义函数逻辑本身效率不高:遍历每个国家时反复切片DataFrame,不仅耗时,还容易因重复遍历导致数据冗余。
最优解决方案:直接拼接所有指标DataFrame
所有指标文件的结构完全一致(仅Economic factor列值不同),直接用pd.concat一次性合并所有指标数据,既简洁又能避免重复,同时自动保留所有国家(包括只有部分指标的国家,比如阿尔巴尼亚)。
代码示例
import pandas as pd # 读取所有指标文件 gdp = pd.read_excel("gdp_data.xlsx") unemployment_rates = pd.read_excel("unemployment_data.xlsx") inflation_rates = pd.read_excel("inflation_data.xlsx") # 一次性合并所有DataFrame merged_df = pd.concat([gdp, unemployment_rates, inflation_rates], ignore_index=True) # 按国家和指标排序(可选,让数据更规整) merged_df.sort_values(by=["Country", "Economic factor"], inplace=True) # 去重(如果原始文件存在重复行的话) merged_df.drop_duplicates(inplace=True)
自定义函数的修正方案(可选)
如果非要沿用自定义函数的思路,第二次合并通胀率时,必须遍历唯一的国家列表,而非已合并DataFrame中重复的Country值。修改后的代码示例:
# 假设已得到合并GDP和失业率的merged_df inflation_rates = pd.read_excel("inflation_data.xlsx") # 获取唯一国家列表,避免重复遍历 unique_countries = merged_df["Country"].unique() def add_inflation_rate(country): if country in inflation_rates["Country"].values: country_inflation = inflation_rates[inflation_rates["Country"] == country] # 先获取该国家已有的数据,再拼接通胀率 country_data = pd.concat([merged_df[merged_df["Country"] == country], country_inflation], ignore_index=True) return country_data else: return merged_df[merged_df["Country"] == country] # 合并通胀率 final_df = pd.concat([add_inflation_rate(country) for country in unique_countries], ignore_index=True) final_df.sort_values(by=["Country", "Economic factor"], inplace=True)
但显然,直接用pd.concat的方式更高效、更易维护。
内容的提问来源于stack exchange,提问作者Q.Ask
相关产品推荐
相关产品推荐

