基于关联数据取值:Python Pandas代码TypeError报错排查
解决你的代码错误并实现需求
首先,咱们先看你遇到的TypeError: 'bool' object is not iterable错误,这是因为你写的for循环语法完全不对,另外代码里还有几个其他问题,我一一给你拆解:
主要错误点分析
- for循环逻辑错误:
for l in range(0, 1) and w in range(0, 100)这行的写法完全不符合Python语法。and连接的两个表达式会返回一个布尔值(True/False),而for循环需要的是可迭代对象(比如列表、range等),所以才会报错“布尔对象不可迭代”。而且你这里的逻辑应该是判断输入的l和w是否在指定范围内,而不是用循环遍历范围。 - 数据定义错误:你写的
l_y.txt=(...)这种方式根本不是正确的CSV数据格式,pd.read_csv是读取文件,如果你想直接在代码里定义数据,应该用pd.DataFrame来构造。另外你给出的原始数据行还存在列数不匹配的问题(表头7列,第一行数据有8个值),我已经帮你修正成符合需求的结构。 - 缩进错误:
print(df['A'].values[0])没有缩进,在Python里会被认为不在函数或循环块内,会触发语法错误。 - 变量名冲突:你先把输入的风速赋值给了
l,然后又在for循环里用l作为循环变量,这会覆盖之前的输入值,导致逻辑混乱。
修正后的代码
根据你的需求:输入0-1之间的l(风速)、对应mesafe列的数值,获取mesafe=0时A列的结果23,我把代码修正如下:
import pandas as pd def var(): # 直接构造符合需求的DataFrame,替代错误的l_y.txt定义 df = pd.DataFrame({ 'mesafe': [0, 1000, 5000, 10000, 20000, 50000, 100000], 'A': [23, 210, 820, 1600, 2800, 5900, 10000], 'B': [18, 170, 510, 1200, 2100, 4600, 8100], 'C': [14, 110, 380, 820, 1600, 3400, 6100], 'D': [8, 60, 300, 560, 1000, 3200, 3900], 'E': [4, 40, 230, 400, 820, 1600, 2800], 'F': [0, 30, 160, 250, 500, 1100, 2000] }) # 获取输入并做合法性校验 try: l = float(input("speed of the wind (0-1): ")) if not (0 <= l <= 1): print("Wind speed must be between 0 and 1!") return w = int(input("range (mesafe value): ")) # 校验输入的mesafe是否在现有数据范围内 if w not in df['mesafe'].values: print(f"Range must be one of these values: {df['mesafe'].tolist()}") return except ValueError: print("Please enter valid numbers!") return # 根据输入的w(mesafe)获取对应的A列值 result = df[df['mesafe'] == w]['A'].values[0] print(f"Result for mesafe={w} in column A: {result}") # 调用函数执行 var()
运行说明
当你运行这段代码时:
- 输入任意0-1之间的风速(比如
0.3) - 输入range值为
0 - 程序就会输出
Result for mesafe=0 in column A: 23,这就是你想要的预期结果。
内容的提问来源于stack exchange,提问作者Umar
相关产品推荐
相关产品推荐

