如何用Python Pandas自动分类风速数值列表?代码调试求助
问题分析
你的循环逻辑问题出在三层嵌套的无关联遍历:外层i循环遍历所有列表,中层e循环遍历所有区间起始值,内层遍历所有数值,导致每个列表都会被所有符合任意区间的数值重复填充,或者因i和e没有对应关系,出现逻辑混乱。
解决方案
方案1:修正手动循环逻辑
不需要三层嵌套,只需为每个数值找到对应区间的列表索引,直接填充:
import pandas as pd wind = pd.read_csv("wind.csv") df = pd.DataFrame(wind) x = df["Value"] d = sorted(pd.Series(x)) # 生成区间起始值列表,以及对应空列表 max_speed = int(x.max()) bins = list(range(0, max_speed + 1, 5)) lst = [[] for _ in bins] # 遍历每个风速值,分配到对应区间列表 for n in d: # 计算对应区间索引,处理边界值 if n >= bins[-1]: # 超过最大区间起始值的数值,放入最后一个列表 lst[-1].append(n) else: # 左闭右开区间:[e, e+5),对应索引为n//5 idx = int(n // 5) lst[idx].append(n)
如果需要严格匹配你最初的n>e且n<e+5(即开区间(e, e+5)),可以调整判断逻辑:
for n in d: for idx, e in enumerate(bins): if e < n < (e + 5): lst[idx].append(n) break # 找到对应区间后立即跳出,避免重复判断 else: # 处理刚好等于区间边界的数值(如n=5、n=10等),可根据需求放入对应列表 if n in bins: lst[bins.index(n)].append(n)
方案2:用Pandas原生函数实现(更高效简洁)
Pandas的cut和groupby可以直接完成分组,避免手动循环的错误:
import pandas as pd wind = pd.read_csv("wind.csv") df = pd.DataFrame(wind) x = df["Value"] # 定义区间:左闭右开,包含所有风速值 max_speed = int(x.max()) bins = range(0, max_speed + 6, 5) # 扩展到max_speed+5,确保覆盖最大值 # 生成区间标签(如"0-5"、"5-10") labels = [f"{start}-{start+5}" for start in bins[:-1]] # 为每条数据添加分组标签 df["wind_interval"] = pd.cut(df["Value"], bins=bins, labels=labels, include_lowest=True) # 按分组提取数据,转换为列表集合 grouped_wind = [group["Value"].tolist() for _, group in df.groupby("wind_interval")]
这个方法更符合Pandas的使用习惯,代码简洁且性能更优,适合处理批量数据。
内容的提问来源于stack exchange,提问作者enrique perez
相关产品推荐
相关产品推荐

