Google Colab中pandas DataFrame如何正确导出完整Excel/CSV数据
导出异常问题解决方法
异常原因
- 爬取得到的文本首尾自带换行符
\n,Excel识别后会自动将内容拆分到多行,你遇到的异常效果如下:
- 当前存储逻辑是将单个人的「姓名、所属机构、职位」3项信息作为独立行存入列表,本身就不符合结构化数据的排版要求。
修正代码
方案1:将3项信息合并为单条记录存储(占1列)
import pandas as pd from google.colab import files from bs4 import BeautifulSoup # 假设soup已经初始化完成 tmpList = [] speaker_name = soup.find_all('h4', class_ = 'clearfix Roboto-Medium font15 sbl-t t-b-m0 dks-t l-h20' ) # 先清理所有文本的首尾空白、换行 cleaned_text = [item.text.strip() for item in speaker_name] # 按3个元素为一组拼接,对应单个人的完整信息 for i in range(0, len(cleaned_text), 3): if i+2 < len(cleaned_text): # 可自定义分隔符,比如空格、顿号、斜杠等 full_info = f"{cleaned_text[i]} / {cleaned_text[i+1]} / {cleaned_text[i+2]}" tmpList.append(full_info) df1 = pd.DataFrame(tmpList, columns=['人员信息']) # 导出时指定utf-8-sig编码,避免Excel打开乱码 df1.to_csv('sample.csv', encoding='utf-8-sig', index=False) files.download("sample.csv")
方案2:拆分为3列存储(更规范,推荐)
import pandas as pd from google.colab import files from bs4 import BeautifulSoup # 假设soup已经初始化完成 tmpList = [] speaker_name = soup.find_all('h4', class_ = 'clearfix Roboto-Medium font15 sbl-t t-b-m0 dks-t l-h20' ) cleaned_text = [item.text.strip() for item in speaker_name] for i in range(0, len(cleaned_text), 3): if i+2 < len(cleaned_text): tmpList.append({ '姓名': cleaned_text[i], '所属机构': cleaned_text[i+1], '职位': cleaned_text[i+2] }) df1 = pd.DataFrame(tmpList) df1.to_csv('sample.csv', encoding='utf-8-sig', index=False) files.download("sample.csv")
关键修改点说明
- 用
strip()方法清理了每个文本首尾的换行符、多余空白,避免Excel识别到换行符自动拆行 - 调整了数据存储逻辑,把原本分散的3行信息合并为单条人员记录,符合正常的表格排版要求
- 导出csv时指定
encoding='utf-8-sig',避免中文内容在Excel中打开出现乱码 - 导出时加
index=False,避免把pandas的自动行序号也存入csv文件
内容的提问来源于stack exchange,提问作者Raspberry Lemon
相关产品推荐
相关产品推荐

