python pandas 滑动计算相关系数

有两个文件,文件 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 的筛选功能,还能实现一些其他计算和筛选功能,希望我的文字对你有帮助。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值