Python计算多个文件一段时间内平均值并添加到文件1新增一列中
2021/11/15 17:13:01
本文主要是介绍Python计算多个文件一段时间内平均值并添加到文件1新增一列中,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
背景是:多条跑道中都有对应的时间和速度,如何计算一段时间内所有跑道的平均速度?并添加到另外一个文件的新增列中。
文件1(data.csv)是月份总表,只有开始时间和结束时间。多个文件(12021-11-15.csv、22021-11-15.csv、32021-11-15.csv...)是日期表,只有一天的开始时间、结束时间、对应时刻速度。
多条跑道表中的数据如下(日期格式有两种):
时间 | 1.data |
2021-11-15 14:28:28 | 2 |
2021-11-15 14:38:28 | 3 |
时间 | 2.date |
2021/11/15 14:28:28 | 2.5 |
2021/11/15 14:38:28 | 3.5 |
那么这十分钟内,跑道1的平均速度是2.5,跑道2的平均速度是3,总跑道的平均速度是2.75。
(1)读取文件1,并增加空列
df1['average']=' '
(2)读取文件1中的开始时间和结束时间
iloc主要用来提取行数据,详细用法可参考Pandas中loc和iloc函数用法详解(源码+实例) - 简书
然后因为每个文件的时间格式不太一致,统一以后只取秒钟之前的数据(看需求)
其中try和except用来处理这种情况非常合适!Python try except异常处理详解(入门必读)
(3)找到开始时间下的多个跑道文件
因为每一天的数据都在不同的文件中,所以根据(2)提取的开始时间,就看可以找到当天的数据。这里为了方便操作,如果开始时间和结束时间不在一个文件,速度直接视为0。
if int(starttime[8:10]) == int(endtime[8:10]): # 不跨天
(4)找到小文件下的开始和结束时间位置
start_loc = np.argwhere(timelist == starttime[-5:])[0][0]
end_loc = np.argwhere(timelist == endtime[-5:])[0][0]
(5)求开始到结束时间内的平均速度(重点)
data_list = np.array(df_data[str(j+1)+'.data'].iloc[start_loc:end_loc+1])
用第一次迭代来说明,这里就是取到总表文件1第一行的开始和结束时间,然后找到了各个小文件中对应时间段内的所有速度。
if len(data_list)==0:
data_j=0
else:
data_j = sum(data_list)/len(data_list)
如果该对应时间内未取到速度则视为0,其它情况就是速度总和除以速度个数。
(6)将计算出的平均速度添加到文件1的新增列中
循环前提前设定一个空数组,每次循环得到的速度添加到数组中,最后数组的长度应该和文件1的数据长度相同。
df1['average'] = average
import pandas as pd import numpy as np import os import datetime as dt df1 = pd.read_csv(r'C:/Users/hanhan/PycharmProjects/pythonProject/data.csv',encoding = 'gbk') df1['average']='' data_path = r'C:/Users/hanhan/PycharmProjects/pythonProject/data/' average = [] for i in range(len(df1)): starttime = df1['开始时间'].iloc[i] endtime = df1['结束时间'].iloc[i] #转换成Y-m-d H:M 字符串形式 try: starttime = str(dt.datetime.strptime(starttime, '%Y-%m-%d %H:%M:%S'))[:-3] except: starttime = str(dt.datetime.strptime(starttime, '%Y/%m/%d %H:%M:%S'))[:-3] try: endtime = str(dt.datetime.strptime(endtime, '%Y-%m-%d %H:%M:%S'))[:-3] except: endtime = str(dt.datetime.strptime(endtime, '%Y/%m/%d %H:%M:%S'))[:-3] if int(starttime[8:10]) == int(endtime[8:10]): # 不跨天 for j in range(3): filename = str(j+1)+starttime[:10]+'.csv' df_data = pd.read_csv(os.path.join(data_path,filename),encoding='gb2312') df_data.rename(columns={'Unnamed: 0': '时间'}, inplace=True) timelist = np.array([s[-8:-3] for s in df_data['时间']]) #取小时:分钟 # print(timelist) start_loc = np.argwhere(timelist==starttime[-5:])[0][0] end_loc = np.argwhere(timelist == endtime[-5:])[0][0] # print(start_loc) # print(end_loc) data_list = np.array(df_data[str(j+1)+'.data'].iloc[start_loc:end_loc+1]) if len(data_list)==0: data_j=0 else: data_j = sum(data_list)/len(data_list) else: lasu_j=0 average.append(lasu_j) print('i=',i) print('average', average) df1['average'] = average
这篇关于Python计算多个文件一段时间内平均值并添加到文件1新增一列中的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-24Python编程基础详解
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器
- 2024-11-16四种数据科学Web界面框架快速对比:Rio、Reflex、Streamlit和Plotly Dash
- 2024-11-14获取参数学习:Python编程入门教程