Python中Pandas DataFrame导出Excel遇TypeError问题求解
问题解决方法
1. 修复代码中的错误
你遇到的TypeError本质是pandas 2.0及以上版本已移除DataFrame.append()方法,且该方法原本仅支持接收Series或DataFrame对象,直接传入字典会触发类型校验错误。官方推荐用pd.concat()替代,以下是修正后的代码:
基础数据拼接代码
import pandas as pd # 定义列名 columns = ['Client', 'Country', 'ID'] # 模拟爬取到的数据源 data_source = [ {'Client': 'John Doe', 'Country': '@Italy', 'ID': '1234567890'}, {'Client': 'Jane Smith', 'Country': '@San Marino', 'ID': '9876543210'}, ] # 直接将数据源转为DataFrame,无需循环拼接(效率更高) new_data_df = pd.DataFrame(data_source, columns=columns)
如果你的爬取逻辑需要逐行处理数据(比如爬取时逐行生成字典),可以先收集所有行到列表,最后一次性转成DataFrame:
# 模拟逐行爬取场景 new_data_list = [] # 替换为你的爬取循环 for item in 你的爬取结果集: row = {'Client': item['client'], 'Country': item['country'], 'ID': item['id']} new_data_list.append(row) # 转换为DataFrame new_data_df = pd.DataFrame(new_data_list, columns=columns)
2. 实现Excel文件的追加更新(而非覆盖)
要实现向已有Excel文件追加数据,需先判断文件是否存在:
- 文件不存在:直接写入新数据;
- 文件存在:读取原有数据,与新数据合并后再写入。
完整代码
import pandas as pd import os columns = ['Client', 'Country', 'ID'] folder_path = "/folder/user/" file_name = os.path.join(folder_path, "output_file.xlsx") # 模拟爬取到的新数据 data_source = [ {'Client': 'John Doe', 'Country': '@Italy', 'ID': '1234567890'}, {'Client': 'Jane Smith', 'Country': '@San Marino', 'ID': '9876543210'}, ] new_data_df = pd.DataFrame(data_source, columns=columns) # 处理追加逻辑 if os.path.exists(file_name): # 读取原有Excel数据 existing_df = pd.read_excel(file_name, sheet_name='Data') # 合并新旧数据 combined_df = pd.concat([existing_df, new_data_df], ignore_index=True) else: # 文件不存在时直接使用新数据 combined_df = new_data_df # 写入Excel(使用openpyxl引擎支持追加模式) with pd.ExcelWriter(file_name, engine='openpyxl', mode='a' if os.path.exists(file_name) else 'w') as writer: if os.path.exists(file_name): # 删除原有同名sheet,避免生成重复sheet(如Data1) writer.book.remove(writer.book['Data']) combined_df.to_excel(writer, sheet_name='Data', index=False)
关键说明
- 用
os.path.join()处理路径,兼容不同操作系统的路径格式; - 追加模式需使用
engine='openpyxl'(xlsxwriter不支持追加); - 追加前删除原有
Datasheet,保证数据始终存储在同一个sheet中。
内容的提问来源于stack exchange,提问作者Lorenzo Castagno
相关产品推荐
相关产品推荐

