open()与numpy.savetxt()函数异常行为的技术问询
解决Pandas/Numpy处理建筑用水数据并写入文件的异常问题
看起来你在处理加州建筑用水数据时,代码写到文件写入环节就中断了,而且大概率遇到了文件操作或统计量输出格式的问题。我来帮你梳理问题并给出修正后的完整代码:
先分析你代码里的几个潜在问题:
- 文件操作未完成:你写到
hw1.wri...就停了,应该是调用write()方法,而且写完后必须关闭文件(或者用with语句自动管理资源,更安全) - 众数输出格式不对:
waterUsage.mode()返回的是Pandas Series对象,直接转字符串会带索引等额外信息,不是干净的众数值 - 未处理空值:原始数据里的用水字段可能存在NaN,会影响统计结果的准确性
- 文件路径风险:如果目标文件所在的目录不存在,直接写入会报错
修正后的完整代码:
import pandas as pd import numpy as np # 读取数据,若CSV有特殊字符可添加encoding参数适配 data = pd.read_csv(r'c:\Documents\DS\CAStateBuildingMetrics.csv') # 提取用水数据并清理空值,保证统计结果准确 water_usage = data["Water Use (All Water Sources) (kgal)"].dropna() # 提取部门和物业ID数据 dept_info = data[["Department Name", "Property Id"]] # 计算统计量,优化众数的输出格式 mean_water = round(water_usage.mean(), 2) # 保留两位小数提升可读性 median_water = round(water_usage.median(), 2) # 处理无众数的情况(比如所有值唯一) mode_water = water_usage.mode().iloc[0] if not water_usage.mode().empty else "无众数" # 使用with语句自动管理文件资源,避免忘记关闭文件导致数据丢失 with open(r'c:\Documents\DS\testFile.txt', "a", encoding='utf-8') as hw1: # 写入统计信息 hw1.write("建筑用水统计信息:\n") hw1.write(f"均值: {mean_water} kgal\n") hw1.write(f"中位数: {median_water} kgal\n") hw1.write(f"众数: {mode_water} kgal\n\n") # 写入部门和物业ID数据(示例写入前10行,可按需调整) hw1.write("部门与物业ID信息:\n") hw1.write(dept_info.head(10).to_string(index=False)) # 不写入索引,格式更整洁
关键改进说明:
- 用
with语句操作文件:无需手动调用close(),文件会在代码块结束后自动关闭,避免资源泄漏和数据丢失 - 清理空值:用
dropna()移除用水数据中的NaN,确保统计结果准确 - 优化众数输出:通过
iloc[0]获取众数的具体值,同时判断如果没有众数时给出友好提示 - 格式化输出:统计量保留两位小数,写入文件时添加清晰标题,数据输出去掉索引,可读性更强
- 指定编码:写入文件时指定
encoding='utf-8',避免中文或特殊字符乱码
如果运行时仍有异常,可以检查这几点:
- 确认
c:\Documents\DS\目录确实存在 - 确认CSV文件的列名和你代码里的完全一致(注意大小写和空格)
- 确认CSV文件没有损坏,能正常用Pandas读取
内容的提问来源于stack exchange,提问作者isakbob
相关产品推荐
相关产品推荐

