基于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
相关产品推荐
相关产品推荐

