有两个文件,文件 1 和文件 2,都是 csv 文件,第一列是 datetime 格式,第二列是分钟值的数据,实现的目标是把两个文件合并成一个文件,文件 1 的数据列列名为 n1,文件 2 的数据列列名为 n2,合并后数据格式为第一列为分钟值,第二列和第三列为具体数据,把这些分钟数据切成按天划分的数据,再对 n1 和 n2 做相关计算,把计算结果存入到文件,第一列是时间,第二列是相关系数。
一、读入数据
df1 = pd.read_csv(file1_csv ,sep=',' , parse_dates=['date_time'])
df2 = pd.read_csv(file2_csv ,sep=',' , parse_dates=['date_time'])
#原来数据列名相同,更改列名
df1.columns = ['date_time','n1']
df2.columns = ['date_time','n2']
#通过pandas的merge合并两个文件成一个文件
df = pd.merge(df1, df2)
#让第一列数据转成datetime格式,
df['date_time1'] = pd.to_datetime(df['date_time'])
二、计算总天数
timg_l = (df['date_time1'].max() - df['date_time1'].min() ) / datetime.timedelta(days = 1)
三、计算相关系数
file_corr 为相关系数文件。通过 pandas 的条件筛选,选出一天的数据,对一天的数据做相关计算,得到的结果是 DateFrame 的表,是相关系数矩阵,把相关系数矩阵转换成字典格式,得到的相关系数存入到 csv 文件中,操作完成。可以画出相应的相关系数图件。
with open(file_corr,"w") as f:
f.write( "date_time,corr" + '\n')
for i in range(int(timg_l)):
begin_data = df['date_time1'].min() + datetime.timedelta(days = i)
end_data = df['date_time1'].min() + datetime.timedelta(days = i+1)
temp = df[(df['date_time1']> begin_data) & (df['date_time1'] < end_data)]
sss = temp.corr()
da = sss.to_dict(orient = 'dict') #records
#for ss in sss:
# print(ss)
#print(da['n2']['n1'])
f.write(str(begin_data) + "," + str(da['n2']['n1']) + '\n')
f.close() #关闭文件,处理结束
使用 pandas 的筛选功能,还能实现一些其他计算和筛选功能,希望我的文字对你有帮助。