针对批量提取干旱特征,目前只找到matlab的代码,代码要求的数据格式跟我的数据格式不太相同,所以我选择用比较熟悉的python进行预处理。由于我是新手,所以代码可能有点复杂,但是很容易看懂。
原始数据中,时间这列格式为1980/3/1,目标格式将时间拆分为一列是年,一列是月
import pandas as pd
import os
f = 568
while f < 13611:
point_df = pd.DataFrame()
data_path = 'G:/Python_/ghtz/sewdi_1'
out_path = 'G:/Python_/ghtz/data/'
f是文件名,需要对文件夹下的f.csv文件进行循环,因此每次循环都要新的dataframe表格,所以空表写在循环里面。
if os.path.exists(data_path + "/" + str(f) + ".csv"):
data = pd.read_csv(data_path + "/" + str(f) + ".csv")
这一步是判断文件名是否存在,如果存在则读取为data
i = 1980
k = 0
while i < 2018:
j = 3
while j < 10:
for index, row in data.iterrows():
point_df.loc[k, 'year'] = i
point_df.loc[k, 'month'] = j
point_df.loc[k, 'index'] = data.loc[k, 'EWD_calculated_index']
k += 1
j += 1
i += 1
print(str(f)+"!!!")
这里正式对时间进行循环,注意初始年月的书写位置,每次对新一年的循环,都要初始月份,不然就会判断上一次的月份,而不在范围内,导致无法进入循环。这里我的数据月份范围为3-9月,所以从3开始,到10结束.。
以上代码在写入年月的时候发现输出为1980.0、1981.0以及3.0、4.0,针对这种情况,我对代码进行以下修改
i = 1980
k = 0
while i < 2018:
j = 3
while j < 10:
for index, row in data.iterrows():
point_df.loc[k, 'year'] = '%i' % (i)
point_df.loc[k, 'month'] = '%i' % (j)
point_df.loc[k, 'index'] = data.loc[k, 'EWD_calculated_index']
k += 1
j += 1
i += 1
print(str(f)+"!!!")
符号’%i'可以对i和j进行取整,这样就可以输出正确的年月啦
point_df.to_csv(out_path+str(f)+'.csv')
f+=1
输出这个点的数据,并进行下一个文件的数据处理