python dataframe时间类型数据预处理以及周期统计

时间类型数据预处理:
0、时间格式转换

dateframe 日期数据,字符型转换成日期格式:

pd.to_datetime(dateframe_timedate,format='%Y/%m/%d %H:%M:%S')

常见的报错检查点:

  • 格式不匹配,检查原始数据中的日期格式,‘2019/01/01 00:00:00’只能转换成format=’%Y/%m/%d %H:%M:%S’。同理,‘2019-01-01 00:00:00’只能转换成format=’%Y-%m-%d %H:%M:%S’。
    在excel或者csv中,可以通过设置单元格格式——自定义格式,统一时间字符串的格式。或者调整format=’%Y/%m/%d %H:%M:%S’。
  • 日期超出python中日期范围,检查原始数据中日期,通常是日期填写错误。
1、异常值处理
时间内容填写错误置空

np.where(条件,x,y)#条件正确取值为x,条件错误取值为y。
np.where()可见np.where()用法

TFS_data_origin['Date_of_submission'] = np.where((len(TFS_data_origin['Date_of_submission'])<19)|\
                                                  (TFS_data_origin['Date_of_submission']=='0001/01/01 08:00:00'),\
                                                  None, TFS_data_origin['Date_of_submission']) 
时间之间逻辑错误值置空

多个日期比较前,先进行时间格式转换,字符型时间相互比较会有问题。
np.where(条件,x,y)#条件正确取值为x,条件错误取值为y。

TFS_data_origin['Delivered_date'] = np.where((TFS_data_origin['Delivered_date']<TFS_data_origin['Date_of_submission'])|\
                                              (TFS_data_origin['Delivered_date']<TFS_data_origin['Adopted_date'])|\
                                             (TFS_data_origin['Delivered_date']<TFS_data_origin['Delivery_date']) ,\
                                                  None, TFS_data_origin['Delivered_date'])
2、两个日期间隔天数计算

多个日期计算前,先进行时间格式转换。
dataframe格式日期天数计算参见另一篇博文dataframe计算两个日期之间天数 两种思路(推荐思路2),这里采用的是思路2.

FS_data_origin['Req_delivery_cycle'] = (TFS_data_origin['Delivered_date'] - TFS_data_origin['Date_of_submission']).dt.days + 1
3、计算周期统计量

group by 结合describe()或者聚合函数sum()等。
dateframe中多种数据类型,可以选择其中的某几列进行统计。
dateframe某一列中多种类型,可以强制转换成数值型再进行统计。

TFS_data[['Req_delivery_cycle','Req_delivery_waiting_cycle','Req_RD_cycle',\
          'Req_plan_cycle']]=TFS_data[['Req_delivery_cycle','Req_delivery_waiting_cycle',\
                                       'Req_RD_cycle','Req_plan_cycle']].astype('float')
TFS_statistic = TFS_data.groupby("project_name").describe(percentiles=[.5, .8])
栗子
'''
2010-01-08
主题:python dataframe时间类型数据预处理以及周期统计分析
Dandan
'''
import  pandas as pd
import numpy as np
import time, datetime
from datetime import datetime

#导入数据
#encoding = ‘gbk’ windows下中文的编码
TFS_data_origin = pd.read_csv("data_input/timedata.csv",encoding = 'gbk')

#原始数据预览
print('*'*10+'TFS_data_origin shape'+'*'*10)
TFS_data_origin.describe()
print(TFS_data_origin.shape)

#数据预处理
#TFS数据预处理
#日期填写率统计
TFS_data_origin.isnull().any()
print(TFS_data_origin.isnull().sum())

#1-日期异常值处理
#日期填写内容错误,比如“0000-01-01 00:00:00”,日期长度格式填写错误,比如'2019-01-01 00:00'
TFS_data_origin['Date_of_submission'] = np.where((len(TFS_data_origin['Date_of_submission'])<19)|\
                                                  (TFS_data_origin['Date_of_submission']=='0001/01/01 08:00:00'),\
                                                  None, TFS_data_origin['Date_of_submission'])                                               
TFS_data_origin['Adopted_date'] = np.where((TFS_data_origin['Adopted_date']<'2019/01/01 00:00:00')|\
                                             (len(TFS_data_origin['Adopted_date'])<19)|\
                                            (TFS_data_origin['Date_of_submission']=='0001/01/01 08:00:00'),\
                                                  None, TFS_data_origin['Adopted_date'])
TFS_data_origin['Delivery_date'] = np.where((TFS_data_origin['Delivery_date']<'2019/01/01 00:00:00')|\
                                             (len(TFS_data_origin['Delivery_date'])<19)|\
                                             (TFS_data_origin['Date_of_submission']=='0001/01/01 08:00:00'),\
                                                  None, TFS_data_origin['Delivery_date'])
TFS_data_origin['Delivered_date'] = np.where((TFS_data_origin['Delivered_date']<'2019/01/01 00:00:00')|\
                                              (len(TFS_data_origin['Delivered_date'])<19)|\
                                               (TFS_data_origin['Date_of_submission']=='0001/01/01 08:00:00'),\
                                                  None, TFS_data_origin['Delivered_date'])
#日期字符串日期化,字符串转日期格式,以便进行日期比较。字符型日期比较会出错。'2020/1/9'>'2020/1/13'
TFS_data_origin['Date_of_submission'] = pd.to_datetime(TFS_data_origin['Date_of_submission'],format='%Y/%m/%d %H:%M:%S')
TFS_data_origin['Adopted_date'] = pd.to_datetime(TFS_data_origin['Adopted_date'],format='%Y/%m/%d %H:%M:%S')
TFS_data_origin['Delivery_date'] = pd.to_datetime(TFS_data_origin['Delivery_date'],format='%Y/%m/%d %H:%M:%S')
TFS_data_origin['Delivered_date'] = pd.to_datetime(TFS_data_origin['Delivered_date'],format='%Y/%m/%d %H:%M:%S')

                                  
#日期之间关系异常,理论上'Date_of_submission'<='Adopted_date'<='Delivery_date'<='Delivered_date'
TFS_data_origin['Delivered_date'] = np.where((TFS_data_origin['Delivered_date']<TFS_data_origin['Date_of_submission'])|\
                                              (TFS_data_origin['Delivered_date']<TFS_data_origin['Adopted_date'])|\
                                             (TFS_data_origin['Delivered_date']<TFS_data_origin['Delivery_date']) ,\
                                                  None, TFS_data_origin['Delivered_date'])
TFS_data_origin['Delivery_date'] = np.where((TFS_data_origin['Delivery_date']<TFS_data_origin['Date_of_submission'])|\
                                              (TFS_data_origin['Delivery_date']<TFS_data_origin['Adopted_date']),\
                                                  None, TFS_data_origin['Delivery_date'])
TFS_data_origin['Adopted_date'] = np.where((TFS_data_origin['Adopted_date']<TFS_data_origin['Date_of_submission']),\
                                           None, TFS_data_origin['Adopted_date'])
# TFS_data_origin.describe()

print('*'*20)
TFS_data_origin.isnull().any()
print(TFS_data_origin.isnull().sum())


#日期字符串日期化,字符串转日期格式,以便进行日期比较。字符型日期会存在问题。
TFS_data_origin['Date_of_submission'] = pd.to_datetime(TFS_data_origin['Date_of_submission'],format='%Y/%m/%d %H:%M:%S')
TFS_data_origin['Adopted_date'] = pd.to_datetime(TFS_data_origin['Adopted_date'],format='%Y/%m/%d %H:%M:%S')
TFS_data_origin['Delivery_date'] = pd.to_datetime(TFS_data_origin['Delivery_date'],format='%Y/%m/%d %H:%M:%S')
TFS_data_origin['Delivered_date'] = pd.to_datetime(TFS_data_origin['Delivered_date'],format='%Y/%m/%d %H:%M:%S')

'''
计算周期,没有考虑状态!
TFS_data_origin['Req_delivery_cycle'] = (TFS_data_origin['Delivered_date'] - TFS_data_origin['Date_of_submission']).dt.days + 1
print(TFS_data_origin['Req_delivery_cycle'].isnull().sum())
print(TFS_data_origin['Req_delivery_cycle'].mean())

TFS_data_origin['Req_RD_cycle'] = (TFS_data_origin['Delivery_date'] - TFS_data_origin['Adopted_date']).dt.days + 1
print(TFS_data_origin['Req_RD_cycle'].isnull().sum())
print(TFS_data_origin['Req_RD_cycle'].mean())

TFS_data_origin['Req_delivery_waiting_cycle'] = (TFS_data_origin['Delivered_date'] - TFS_data_origin['Delivery_date']).dt.days + 1
print(TFS_data_origin['Req_delivery_waiting_cycle'].isnull().sum())
print(TFS_data_origin['Req_delivery_waiting_cycle'].mean())

TFS_data_origin['Req_plan_cycle'] = (TFS_data_origin['Adopted_date'] - TFS_data_origin['Date_of_submission']).dt.days + 1
print(TFS_data_origin['Req_plan_cycle'].isnull().sum())
print(TFS_data_origin['Req_plan_cycle'].mean())
'''

#特定状态下计算周期,其余状态置空。
TFS_data_origin['Req_delivery_cycle'] = np.where(TFS_data_origin['standard_state'].map(lambda x:x=='已交付'),\
                                                 ((TFS_data_origin['Delivered_date'] - TFS_data_origin['Date_of_submission']).dt.days + 1),\
                                                 None)
TFS_data_origin['Req_delivery_waiting_cycle'] = np.where(TFS_data_origin['standard_state'].map(lambda x:x=='已交付'),\
                                                 ((TFS_data_origin['Delivered_date'] - TFS_data_origin['Delivery_date']).dt.days + 1),\
                                                 None)
TFS_data_origin['Req_RD_cycle'] = np.where(TFS_data_origin['standard_state'].map(lambda x:x in ('已交付','可交付')),\
                                                 ((TFS_data_origin['Delivery_date'] - TFS_data_origin['Adopted_date']).dt.days + 1),\
                                                 None)
TFS_data_origin['Req_plan_cycle'] = np.where(TFS_data_origin['standard_state'].map(lambda x:x in ('已采纳','已认领'),\                                   ((TFS_data_origin['Adopted_date'] - TFS_data_origin['Date_of_submission']).dt.days + 1),\
                                                 None)

print(TFS_data_origin['Req_delivery_cycle'], TFS_data_origin['Req_delivery_cycle'])

#选取大于等于1的有效需求交付周期数据
TFS_data = TFS_data_origin[(TFS_data_origin['Req_delivery_cycle']>=1)]

TFS_data.describe()
outputpath0='data_output/TFS_data_new.csv'
TFS_data.to_csv(outputpath0,sep=',',index=True,header=True)

#将周期列转换为数值型数据,方便进行分组统计
TFS_data[['Req_delivery_cycle','Req_delivery_waiting_cycle','Req_RD_cycle',\
          'Req_plan_cycle']]=TFS_data[['Req_delivery_cycle','Req_delivery_waiting_cycle',\
                                       'Req_RD_cycle','Req_plan_cycle']].astype('float')

#数据分组统计
#percentiles=[.5, .8] 增加80%分位数:
TFS_statistic = TFS_data.groupby("project_name").describe(percentiles=[.5, .8])

print('*'*10+'TFS_statistic shape'+'*'*10)
print(TFS_statistic.shape)
print('*'*20)

outputpath1='data_output/TFS_statistics_new.csv'
TFS_statistic.to_csv(outputpath1,sep=',',index=True,header=True)

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
心电信号的预处理过程可以分为以下几个步骤: 1. 数据清洗和去噪:首先对原始心电信号进行数据清洗,去除可能存在的异常值和噪声。可以使用滤波器等技术来降低噪声的影响。 2. R波峰检测:对去噪后的心电信号进行R波峰检测,找到每个心跳周期的R波峰位置。可以使用各种算法,如峰值检测、阈值检测等方法来实现。 3. 心率计算:将R波峰的位置转换为心率值,可以通过计算R-R间期的倒数来得到心率值。 4. 信号质量评估:对处理后的心电信号进行质量评估,判断信号的可靠性和准确性。可以使用各种指标,如信噪比、幅度范围等来评估信号质量。 5. 特征提取:对心电信号进行进一步的分析,提取P波、Q波、S波和T波等特征。可以使用各种特征提取算法,如小波变换、时域特征提取等方法来提取特征。 6. 心脏相位计算:计算心脏的相位信息,包括心房相位和心室相位。可以使用相位计算算法来计算心脏的相位信息。 7. 数据存储:将处理后的信号、心率值、信号质量等信息存储到DataFrame中,方便后续的分析和使用。 以上是心电信号预处理的一般步骤,具体的实现可以根据具体的需求和算法来进行。\[1\] \[2\] #### 引用[.reference_title] - *1* [心电信号预处理](https://blog.csdn.net/weixin_46163097/article/details/130122206)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [心电图信号分类预测——Task3 特征提取](https://blog.csdn.net/m0_46668150/article/details/114991090)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [基于Python的心电信号检测与处理](https://blog.csdn.net/qq_42078934/article/details/121070501)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值