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

基于Pandas实现按用户输入的部门和年份展示数据的问题

完善火灾数据查询函数

我是Python新手,想写一个函数让用户选择部门编号和年份,基于导入的CSV文件(liste_incendies_-du_12_08_2022.csv)数据,根据这两个条件展示结果。以下是目前写的代码,不知道怎么完成后续实现:

import pandas as pd

df=pd.read_csv('liste_incendies_-du_12_08_2022.csv', sep= ';' ,header=2)
swap_list = ["Numéro","Année","Type de feu","Département","Code INSEE","Commune","Lieu-dit","Code du carreau DFCI","Alerte","Origine de l'alerte","Surface parcourue (m2)"]
df = df.reindex(columns=swap_list)
df= df.sort_values('Numéro', ascending= True)
df['Commune']= df['Commune'].str.upper()
df['Lieu-dit']= df['Lieu-dit'].str.upper()
df[['Date','Hours']] = df.Alerte.str.split(" ",expand=True,)
del df["Alerte"]
df["Surface parcourue (m2)"]=df["Surface parcourue (m2)"]/1000  # 转换为千平方米


def firedep():
    dep = input('What department would you like:')
    if dep== "All" or dep== "all" or dep== "ALL":
        print(df.groupby(['Département','Année']).size())
    elif dep != "All" or dep!= "all" or dep!= "ALL":
        year = input('What year would you like:')

完善后的代码实现

import pandas as pd

# 数据预处理部分保留
df=pd.read_csv('liste_incendies_-du_12_08_2022.csv', sep= ';' ,header=2)
swap_list = ["Numéro","Année","Type de feu","Département","Code INSEE","Commune","Lieu-dit","Code du carreau DFCI","Alerte","Origine de l'alerte","Surface parcourue (m2)"]
df = df.reindex(columns=swap_list)
df= df.sort_values('Numéro', ascending= True)
df['Commune']= df['Commune'].str.upper()
df['Lieu-dit']= df['Lieu-dit'].str.upper()
df[['Date','Hours']] = df.Alerte.str.split(" ",expand=True,)
del df["Alerte"]
df["Surface parcourue (m2)"]=df["Surface parcourue (m2)"]/1000  # 转换为千平方米

# 统一部门编号类型,避免输入与数据类型不匹配
df['Département'] = df['Département'].astype(str)

def firedep():
    dep = input('请输入部门编号(输入All查看所有部门数据):')
    # 简化判断逻辑,兼容大小写和前后空格
    if dep.strip().lower() == "all":
        print("各部门各年份火灾数量统计:")
        # 把统计结果转成更易读的表格格式
        print(df.groupby(['Département','Année']).size().reset_index(name='火灾数量'))
    else:
        year_input = input('请输入年份:')
        try:
            year = int(year_input)
            # 根据部门和年份筛选数据
            filtered_data = df[(df['Département'] == dep) & (df['Année'] == year)]
            
            if filtered_data.empty:
                print(f"未找到部门{dep}在{year}年的火灾数据")
            else:
                print(f"部门{dep}在{year}年的火灾数据:")
                print(filtered_data)
                # 补充实用统计信息
                print("\n统计摘要:")
                print(f"火灾总数:{len(filtered_data)}")
                print(f"总过火面积(千平方米):{filtered_data['Surface parcourue (m2)'].sum():.2f}")
        except ValueError:
            print("请输入有效的年份数字")

# 启动查询函数
firedep()

关键优化说明

  • 简化判断逻辑:用dep.strip().lower() == "all"替代多条件判断,兼容用户输入的大小写和前后空格
  • 类型统一:把部门编号转为字符串,避免用户输入字符串编号时和数据类型不匹配
  • 输入校验:对年份输入做异常捕获,防止非数字输入导致报错
  • 空数据处理:筛选无结果时给出明确提示,避免输出空表格
  • 结果优化:不仅展示原始数据,还补充火灾数量、总过火面积等实用统计
  • 中文交互:将输入提示改为中文,更符合使用习惯

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 11:50:19