Python处理Excel时遇'None of ... are in the [columns]'错误求助
问题分析与解决
核心错误原因
- 列名不匹配:错误提示
'None of ... are in the [columns]'说明代码中指定的列名'Data de Vencimento'和Excel文件的实际列名不一致,可能存在拼写错误、前后空格或大小写差异。 - 日期类型不兼容:
datetime.date.today()返回的是date对象,而pandas读取Excel日期后默认是datetime64[ns]类型,直接比较会导致匹配失败。 - 条件赋值语法错误:原代码的条件判断逻辑写法错误,
df[df['Data de Vencimento']]是无效的布尔索引用法,无法实现逐行判断。
分步解决方案
1. 确认并修正列名
先执行以下代码查看Excel文件的实际列名,确保和代码中使用的一致:
import pandas as pd data = pd.read_excel(r'C:\Users\DiegoRocco\Downloads\clientes.xlsx') print(data.columns.tolist())
如果输出列名和'Data de Vencimento'有差异(比如末尾多空格、拼写错误),将代码中的列名替换为实际列名即可。
2. 统一日期类型
将系统当前日期转换为pandas兼容的类型,或者把Excel读取的日期列转换为date类型,两种方式任选其一:
- 方式一:转换系统日期
today = pd.Timestamp(datetime.date.today())
- 方式二:转换Excel日期列
df['Data de Vencimento'] = df['Data de Vencimento'].dt.date today = datetime.date.today()
3. 正确实现条件赋值
以下两种方式均可实现需求,同时处理空值:
方案一:使用np.where(简洁写法)
import numpy as np import pandas as pd import datetime # 读取Excel文件 df = pd.read_excel(r'C:\Users\DiegoRocco\Downloads\clientes.xlsx') # 统一日期类型并确保列是datetime格式 today = pd.Timestamp(datetime.date.today()) df['Data de Vencimento'] = pd.to_datetime(df['Data de Vencimento'], errors='coerce') # 创建新列并处理空值 df['Situação'] = np.where( df['Data de Vencimento'].isna(), 'Data de vencimento inválida', np.where( df['Data de Vencimento'].dt.date == today.date(), 'Pagamento não-pendente', 'Pagamento pendente' ) ) print(df)
方案二:使用df.loc(直观易读)
import pandas as pd import datetime # 读取Excel文件 df = pd.read_excel(r'C:\Users\DiegoRocco\Downloads\clientes.xlsx') # 统一日期类型 today = datetime.date.today() df['Data de Vencimento'] = df['Data de Vencimento'].dt.date # 初始化新列 df['Situação'] = 'Pagamento pendente' # 修改匹配当前日期的行状态 df.loc[df['Data de Vencimento'] == today, 'Situação'] = 'Pagamento não-pendente' # 标记空值行 df.loc[df['Data de Vencimento'].isna(), 'Situação'] = 'Data de vencimento inválida' print(df)
关键注意事项
- 确保Excel文件路径正确,且当前用户有读取权限。
- 如果Excel中的日期格式不标准,使用
pd.to_datetime(..., errors='coerce')可强制转换,无法识别的日期会转为NaT(空日期)。
内容的提问来源于stack exchange,提问作者Diego Nogueira Rocco
相关产品推荐
相关产品推荐

