You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

查询8月平均气温高于22度的日期 修正现有pandas代码问题

问题分析与代码修正

原代码存在的问题

  • 直接给df动态赋值eight属性的写法不规范,容易和DataFrame的原生属性、列名冲突,更推荐单独定义变量存储8月份的子集
  • 循环逻辑错误:for i in df.eight遍历的是DataFrame的列名而非行数据,且avg是整个8月平均气温的Series对象,直接和22比较会返回布尔Series,无法直接用在if判断中
  • 打印逻辑错误:print('date')是打印固定字符串date,不是输出符合条件的日期变量值
  • 存在冗余导入:datetime和matplotlib库在当前需求中未被使用,可以直接删除

修正方案

推荐写法(pandas向量化操作,执行效率更高)

无需手动遍历行,利用pandas原生布尔索引直接完成筛选,逻辑简洁、适合处理任意规模的数据集:

import pandas as pd

path = 'https://github.com/dknife/ML/raw/main/data/'
file = path+'weather.csv'
df = pd.read_csv(file, encoding='CP949')
df.columns = ['date','Average temperature', 'Maximum wind speed', 'Average wind speed']

df['date'] = pd.to_datetime(df['date'], format = "%Y-%m-%d")

# 构建筛选条件:8月份 + 平均气温高于22摄氏度
filter_condition = (df['date'].dt.month == 8) & (df['Average temperature'] > 22)
# 提取符合条件的日期列
result_dates = df.loc[filter_condition, 'date']

# 打印所有符合要求的日期
for date in result_dates:
    print(date)
# 如需直接获得日期列表可使用:result_dates.tolist()

原循环逻辑修正版(仅作错误对照参考,不推荐生产环境使用)

如果需要保留手动遍历的写法,修正后代码如下:

import pandas as pd

path = 'https://github.com/dknife/ML/raw/main/data/'
file = path+'weather.csv'
df = pd.read_csv(file, encoding='CP949')
df.columns = ['date','Average temperature', 'Maximum wind speed', 'Average wind speed']

df['date'] = pd.to_datetime(df['date'], format = "%Y-%m-%d")

eight = 8
# 单独定义变量存储8月子集,不挂载到df对象上
august_df = df.query('date.dt.month == @eight')

# 遍历DataFrame的每一行数据
for _, row in august_df.iterrows():
  if row['Average temperature'] >= 22.0:
    # 输出当前行的日期值,而非固定字符串
    print(row['date'])

内容的提问来源于stack exchange,提问作者si1203

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 15:54:05