如何读取Excel中‘End’标记前的列并导入Pandas DataFrame?
解决方案
1. 截取End标记前的列
你之前的写法存在两个问题:
df.iloc[:, : df != 'End']传入iloc的切片位置要求为整数,布尔矩阵无法作为切片参数- 遍历列名查找End无效,因为End存储在对应列的首行单元格值中,而非列名
正确实现代码:
# 检查首行是否存在值为End的单元格 end_col_mask = df.iloc[0] == 'End' if end_col_mask.any(): # 获取End所在列的整数索引 end_col_pos = df.columns.get_loc(end_col_mask[end_col_mask].index[0]) # 截取End列之前的所有列 df = df.iloc[:, :end_col_pos]
2. 空白单元格识别为NA值
pd.read_excel的na_values参数默认不支持正则匹配,仅会把完全等于传入值的内容识别为NA,因此你的写法无效。可以在读取完成后通过正则替换处理全空白内容:
import numpy as np # 匹配所有仅含空白字符(含全角空格、换行等不可见空白)的单元格,替换为NaN df = df.replace(r'^[\s\u3000\n\r]*$', np.nan, regex=True)
如果后续需要统一空置为空白字符串,再执行:
df = df.fillna('')
不推荐使用inplace=True参数,该写法存在潜在副作用,pandas官方已逐步标记为不推荐用法。
内容的提问来源于stack exchange,提问作者Kai
相关产品推荐
相关产品推荐

