使用pd.concat合并DataFrame时列丢失,所有数据合并至一列如何解决?
解决pd.concat合并DataFrame列丢失、数据挤入单列问题
问题根源
- 接口返回的JSON结构不一致,导致
pd.json_normalize生成的DataFrame列名无法对齐,合并后列结构混乱 - 循环内反复执行
pd.concat和to_csv,既降低效率,也可能因初始空DataFrame引发隐性合并问题 - 部分JSON响应为一维数组,
pd.json_normalize直接解析为单列DataFrame,与其他结构的DataFrame合并时出现列错位
修正代码
import pandas as pd import requests df_list = [] for uuid in uuid_df['uuid']: headers = {'accept': 'application/json', 'api-key': APIKEY} # 注意:原代码中re.get应为requests.get,属于笔误 response = requests.get(f'URL/{uuid}', headers=headers) json_response = response.json() # 兼容列表/字典两种JSON结构 df = pd.json_normalize(json_response) df_list.append(df) # 一次性合并所有DataFrame,外连接保留所有列,重置索引 full_df = pd.concat(df_list, axis=0, join='outer', ignore_index=True) # 保存时去掉默认索引 full_df.to_csv('research.csv', index=False)
核心改进
- 批量合并:先收集所有接口返回的DataFrame到列表,最后一次性合并,避免循环内重复合并的性能损耗和异常
- 结构兼容:
pd.json_normalize可自动处理字典和列表结构,确保不同格式的JSON响应都能解析为规范的DataFrame - 明确合并规则:显式指定
join='outer'确保保留所有列,ignore_index=True避免合并后索引重复 - 优化IO操作:仅在所有数据处理完成后保存CSV,减少磁盘写入次数
内容的提问来源于stack exchange,提问作者Jess R
相关产品推荐
相关产品推荐

