将Excel导入Pandas DataFrame后保留单元格换行符的方法
嘿,这个问题我之前处理过好几次!Excel里用CHR(10)(对应Python里的\n换行符)实现的单元格内多行文本,Pandas默认导入时偶尔会把这些换行吞掉,不过有几个靠谱的解决办法:
方法1:指定正确的读取引擎
Pandas 1.2版本之后,读取.xlsx文件默认用openpyxl引擎,但如果你用的是旧版本,或者引擎被覆盖了,手动指定engine='openpyxl'就能保留换行符。
首先确保你安装了openpyxl:
pip install openpyxl
然后读取代码:
import pandas as pd # 读取时指定openpyxl引擎,自动保留单元格内的\n换行 df = pd.read_excel('your_excel_file.xlsx', engine='openpyxl')
方法2:自定义转换器(针对特定列或全局)
如果你的文件格式特殊,或者引擎读取后还是丢失了换行,可以用converters参数自定义转换逻辑,强制保留换行符(有时候Excel里的换行可能是\r而不是\n,需要替换统一):
def preserve_newlines(cell_value): if isinstance(cell_value, str): # 把可能的\r替换成\n,确保换行符统一 return cell_value.replace('\r', '\n') return cell_value # 针对某一列处理,把'目标列名'换成你的列名 df = pd.read_excel('your_excel_file.xlsx', converters={'目标列名': preserve_newlines}) # 如果要全局处理所有列,可以用这个写法 df = pd.read_excel( 'your_excel_file.xlsx', converters={col: preserve_newlines for col in pd.ExcelFile('your_excel_file.xlsx').parse().columns} )
验证换行是否保留
读取后可以打印某个单元格的内容来确认:
# 比如查看第0行、'目标列名'的内容 print(df.loc[0, '目标列名'])
如果输出里有换行,说明已经成功保留了。要是在Jupyter Notebook里看不到换行,可以先设置显示选项:
pd.set_option('display.max_colwidth', None)
内容的提问来源于stack exchange,提问作者Vinz Frauchiger




