【Python】01 降雨数据清洗

问题描述

现有一批数据,格式如下图,第一列是站码,第二列是值,第三列是时间。
在这里插入图片描述
现要求处理成如下格式,即第一列是站码,第二列是时间(时间格式改为 年/月/日 时:分),第三列是值。
在这里插入图片描述
注意:文件较大,无法用Excel一次性加载完全,考虑用Python编程处理。

解决方案

读取创建文件

fi = open("wucheng-water.csv")  #读取需要修改格式的文件
fo = open("wucheng-water改.csv", "w+")  #创建新文件用于存储处理好的数据

函数:交换时间与值两列

def switch(line):             #交换时间与值两列
    line = line.strip("\n")   #去除字符串两端的空格
    ls = line.split(",")     #将字符串以逗号分隔成列表
    temp = ls[1]             #temp作为中介变量完成时间与值两列的交换
    ls[1] = ls[2]
    ls[2] = temp
    return ls

函数:处理日期时间的格式

def timeprocess(ls):    #处理时间列格式
    dt = eval(ls[1])   #去除时间两端引号
    dt = dt.split(" ")  #把日期与时间分开
    date = dt[0].split("/")  #日期以“/”分开
    date = date[::-1]   #倒序日期
    date = "/".join(date)  #日期重新连接
    time = dt[1][:-3]   #删去时间后三列
    dt = "\"" + date + " " +time + "\"" #重新合成日期
    ls[1] = dt   #添加引号
    return ls

单独处理表头

title = next(fi)   #读取表头,接下来从第二行开始
ls = switch(title)
fo.write(",".join(ls) + "\n")  # 输出列表ls

程序主体部分

for line in fi:
    ls = switch(line)
    ls = timeprocess(ls)
    fo.write(",".join(ls) + "\n")  #输出列表ls

完整代码

#2020/5/27 降雨数据处理

fi = open("wucheng-water.csv")  #读取需要修改格式的文件
fo = open("wucheng-water改.csv", "w+")  #创建新文件用于存储处理好的数据

def switch(line):             #交换时间与值两列
    line = line.strip("\n")   #去除字符串两端的空格
    ls = line.split(",")     #将字符串以逗号分隔成列表
    temp = ls[1]             #temp作为中介变量完成时间与值两列的交换
    ls[1] = ls[2]
    ls[2] = temp
    return ls

def timeprocess(ls):    #处理时间列格式
    dt = eval(ls[1])   #去除时间两端引号
    dt = dt.split(" ")  #把日期与时间分开
    date = dt[0].split("/")  #日期以“/”分开
    date = date[::-1]   #倒序日期
    date = "/".join(date)  #日期重新连接
    time = dt[1][:-3]   #删去时间后三列
    dt = "\"" + date + " " +time + "\"" #重新合成日期
    ls[1] = dt   #添加引号
    return ls

title = next(fi)   #读取表头,接下来从第二行开始
ls = switch(title)
fo.write(",".join(ls) + "\n")  # 输出列表ls

for line in fi:
    ls = switch(line)
    ls = timeprocess(ls)
    fo.write(",".join(ls) + "\n")  #输出列表ls

fo.close()
fi.close()

处理结果

在这里插入图片描述

数据文件及程序

请点此降雨数据下载。

猜你喜欢

转载自blog.csdn.net/weixin_43012724/article/details/106390895