Pandas读取Excel时‘Delivered?’列非空却全部显示NaN问题求助
解决pandas读取Excel时‘Delivered?’列全为NaN的问题
以下是几个实用的排查和解决方向:
精确匹配列名
先打印所有列名,确认代码里的'Delivered?'和Excel里的列名完全一致——有时候列名前后藏着看不见的空格,或者问号是全角字符:print(file.columns.tolist())如果发现列名有差异,比如多了空格,要么用实际列名访问,要么重命名列:
file.rename(columns={'实际列名': 'Delivered?'}, inplace=True)排查Excel本身的问题
- 检查该列是否有合并单元格:合并单元格只会保留第一个单元格的值,其余位置读出来就是NaN
- 确认单元格没有隐藏格式:比如字体颜色和背景色一致,看起来有内容但实际读取为空
- 试试把该列复制到新的空白工作表,再用pandas读取新表,排除原表的格式干扰
调整pandas读取参数
- 关闭默认的NaN识别,避免把空字符串或特殊值判定为NaN:
file = pd.read_excel(file_path, sheet_name="April", keep_default_na=False) - 指定读取引擎为
openpyxl(先确保安装:pip install openpyxl),不同引擎对Excel格式的解析逻辑有差异:file = pd.read_excel(file_path, sheet_name="April", engine='openpyxl') - 用
usecols指定列索引读取,比如知道Delivered?是第3列(从0开始计数):file = pd.read_excel(file_path, sheet_name="April", usecols=[0,1,2])
- 关闭默认的NaN识别,避免把空字符串或特殊值判定为NaN:
直接用Excel引擎读取排查
用openpyxl直接读取该列,验证是否能获取到值:from openpyxl import load_workbook wb = load_workbook(file_path) ws = wb["April"] # 假设Delivered?是第5列(从1开始计数) for row in ws.iter_rows(min_col=5, max_col=5, values_only=True): print(row[0])如果这里能读到值,说明是pandas的读取逻辑问题,可以把这些值手动赋值给DataFrame的对应列。
内容的提问来源于stack exchange,提问作者koliosis-work
相关产品推荐
相关产品推荐

