如何用Python Pandas通过用户输入从Excel指定行提取信息
问题解决:通过CPF从Excel中检索对应行数据
原代码存在两个核心问题:
CPF in dados是判断输入值是否属于DataFrame的列名,而非检查数据行中是否存在该CPF,逻辑完全错误。iloc仅支持整数位置索引,无法直接用CPF字符串定位目标行。
修正方案1:布尔索引(通用场景)
直接通过匹配CPF列的值筛选目标行,无需修改索引:
import pandas as pd # 读取Excel,建议指定CPF列为字符串类型,避免数字格式丢失前导零 dados = pd.read_excel(r"Dados.xlsx", dtype={'CPF': str}) CPF_input = input('Digite o CPF: ') # 筛选匹配CPF的行,只保留需要的列 resultado = dados[dados['CPF'] == CPF_input][['CPF', 'Agencia', 'Conta']] if not resultado.empty: print(resultado) else: print('Não encontrado')
修正方案2:设置CPF为索引(适合CPF唯一的场景)
如果Excel中每个CPF唯一,可以将其设为DataFrame索引,用loc快速检索:
import pandas as pd # 读取Excel并将CPF设为索引,同时指定类型为字符串 dados = pd.read_excel(r"Dados.xlsx", dtype={'CPF': str}).set_index('CPF') CPF_input = input('Digite o CPF: ') try: # 通过索引直接定位,提取需要的列 agencia_conta = dados.loc[CPF_input][['Agencia', 'Conta']] print(f"CPF: {CPF_input}") print(agencia_conta) except KeyError: print('Não encontrado')
注意事项
- 确保Excel中的
CPF列格式与输入值一致:如果CPF包含前导零,必须将列类型设为字符串,否则读取时会自动丢失前导零,导致匹配失败。 - 如果存在多个相同CPF的行,方案1会返回所有匹配行,方案2只会返回最后一行(因为索引唯一),根据实际场景选择。
内容的提问来源于stack exchange,提问作者Gabriel Max
相关产品推荐
相关产品推荐

