字典中DataFrame与外部DataFrame合并失败问题求助
解决DataFrame字典左连接未生效及赋值报错问题
问题复盘
你用pd.read_excel('test_file.xlsx', sheet_name=None)将多工作表存入字典dict_dfs,但循环内执行左连接后,字典里的DataFrame完全没更新;还试过df[key] = pd.merge(...)这种错误写法,直接触发报错。
原代码:
import pandas as pd dict_dfs = pd.read_excel('test_file.xlsx', sheet_name=None) third_party_df = pd.read_excel('another_file.xlsx') for key,df in dict_dfs.items(): df.dropna(axis='columns', how='all', inplace=True) df['Date'] = pd.to_datetime(df['Date'], format='%Y%m%d') df = pd.merge(df, third_party_df, how='left', on='merge_column')
错误赋值尝试:
df[key] = pd.merge(df, third_party_df, how='left', on='merge_column')
问题原因
- 循环里的
df是字典中对应DataFrame的临时引用,执行df = pd.merge(...)时,只是让df指向了新的DataFrame对象,但原字典dict_dfs里的条目根本没被修改。 - 错误写法
df[key] = ...是把DataFrame当成普通字典操作,试图给它添加一列名为key的新列,这和你要更新字典条目的需求完全不符,自然报错。
修正方案
方案1:直接更新字典对应键值
循环过程中,把处理并合并后的DataFrame直接赋值回dict_dfs[key],这样字典里的内容才会被真正更新:
import pandas as pd dict_dfs = pd.read_excel('test_file.xlsx', sheet_name=None) third_party_df = pd.read_excel('another_file.xlsx') for key, df in dict_dfs.items(): # 移除全空列 cleaned_df = df.dropna(axis='columns', how='all') # 转换日期格式 cleaned_df['Date'] = pd.to_datetime(cleaned_df['Date'], format='%Y%m%d') # 执行左连接并更新字典 dict_dfs[key] = pd.merge(cleaned_df, third_party_df, how='left', on='merge_column')
方案2:用字典推导式更简洁
如果不想用循环赋值,也可以用字典推导式一次性生成处理后的字典,代码更紧凑:
import pandas as pd dict_dfs = pd.read_excel('test_file.xlsx', sheet_name=None) third_party_df = pd.read_excel('another_file.xlsx') dict_dfs = { key: pd.merge( df.dropna(axis='columns', how='all').assign(Date=pd.to_datetime(df['Date'], format='%Y%m%d')), third_party_df, how='left', on='merge_column' ) for key, df in dict_dfs.items() }
补充说明
- 如果你不想创建中间变量
cleaned_df,也可以把操作连写,但可读性会稍差一点。 - 确保
third_party_df和每个工作表的merge_column列名一致,否则合并会失败(列名不同时可以用left_on和right_on分别指定两边的列名)。
内容的提问来源于stack exchange,提问作者kawuel
相关产品推荐
相关产品推荐

