1. 数据读取阶段
使用np.loadtxt读取 CSV 文件,关键参数说明:
delimiter=",":指定逗号为分隔符dtype=bytes:先以字节类型读取,避免编码问题skiprows=1:跳过标题行usecols=(1):只读取第二列的温度数据
import numpy as np
# 1. 读取温度数据
temperature_str = np.loadtxt(
"ug_detect.csv",
delimiter=",", # 分隔符
dtype=bytes, # 数据类型 字节类型
skiprows=1, # 跳过第一行标题
usecols=(1) # 只读取第二列数据
)
print("读取出来的温度原始数据:", temperature_str)
2. 数据转换与清洗
这一步主要完成:
- 将字节类型转换为浮点数
- 处理空值:将空字符串转换为 None(在 numpy 中会变为 nan)
- 处理异常值:将高于 50°C 的温度值视为异常,同样转换为 None
# 2. 类型转换+缺失值与异常值处理
temperature = np.zeros(len(temperature_str))
print("初始化的数组temperature:", temperature)
for i in range(len(temperature_str)):
item = temperature_str[i] # 取出当前元素
if item != b"": # 如果当前元素非空
item = float(item) # 字符串转浮点数
if item >= 50.0: # 温度高于50°视为异常值
item = None
else: # 空值处理
item = None
temperature[i] = item # 赋值给新数组
3. 缺失值填充
采用邻近值填充法处理 nan 值:
- 第一个元素缺失:用第二个元素填充
- 最后一个元素缺失:用倒数第二个元素填充
- 中间元素缺失:用前后两个元素的平均值填充
# 3. 处理nan值
for i in range(len(temperature)):
if np.isnan(temperature[i]): # 判断是否为nan值
if i == 0: # 第一个元素
temperature[i] = temperature[i+1]
elif i == len(temperature) - 1: # 最后一个元素
temperature[i] = temperature[i-1]
else: # 中间元素
temperature[i] = 0.5 * (temperature[i-1] + temperature[i+1])
print("nan处理之后的数组temperature:", temperature)