python时序数据操作1--字符串转日期

1. 生成日期数据

import pandas as pd
pd.date_range( )

同生成随机数的思想类似,使用pandas库中的函数

pd.date_range(start=None,end=None,periods=None,freq=None,tz=None,normalize=False,name=None,close=None,**kwargs)

参数解释:


1 设定开始时间、长度、频率

start_date='20200101'
length=10
date_1=pd.date_range(start=start_date,periods=10).tolist()  #默认freq为D,每天
date_1

在这里插入图片描述
也可以设置频率freq=‘M’

date_1=pd.date_range(start=start_date,periods=10,freq='M') 

在这里插入图片描述
2 设定起始、终止时间、频率

start_date='20200101'
end_date='20200110'
date_2=pd.date_range(start=start_date,end=end_date,freq='D')  #默认为D
date_2

在这里插入图片描述
频率freq的设置有:

D --- Day --- 每日
B --- BusinessDay --- 每工作日
H --- Hour --- 每小时
T/min --- Minute ---每分钟
S --- Second --- 每秒
M --- MonthEnd --- 每月最后一个日历日
Q --- Quater --- 每季度

注意上面生成的日期数据,就是list格式,在构建数据框时可以直接用。

pd.DataFrame({'Time':date_1})

在这里插入图片描述

2. 字符串转化为日期

导入数据时常会出现,日期型数据导入后,变成字符串格式,在后续使用时,需要转化为日期。

构造一个时间数据

date_list1=pd.date_range(start=start_date,periods=gap).strftime('%Y%m%d').tolist()   
num1=np.random.randint(1,101,100)   #生成1-101的随机整数
num2=np.random.randint(100,201,100)
df_temp=pd.DataFrame({'Time':date_list1,
                     'Number1':num1,
                     'Number2':num2})
df_temp.head()

在这里插入图片描述
上面数据构造时,为了方便之后举例子,将生成的时间数据转化为字符串后,构造的数据框。

2.1 pd.to_datetime()

print(df_temp['Time'].dtype)
print(pd.to_datetime(df_temp['Time']).dtype)

输出:
object
datetime64[ns]

pd.datetime这个函数可以直接作用在数据框的列上面,直接转换。

2.2 datetime.strptime

注意区分:

from datetime import datetime
datetime.strftime() #由日期格式转化为字符串
datetime.strptime()  #由字符串格式转化为日期

例子:

print(datetime.strptime('20200101','%Y%m%d'))

print(datetime.strptime('2020-01-01','%Y-%m-%d'))

输出:
2020-01-01 00:00:00
2020-01-01 00:00:00

但是这个函数只能作用一个值,如果对数据框的列进行操作,需要首先定义一个函数:

from datetime import datetime
def date_ch(value):
    return datetime.strptime(value,'%Y%m%d')

print(date_ch('20200812'))
df_temp['Time']=df_temp['Time'].apply(date_ch)
df_temp['Time']

在这里插入图片描述

3. 从日期数据中提取成分

1 直接提取:

pd.to_datetime('20200307').month

#year:日
#month:月
#week:周
#day:日

输出:
3

2 使用strftime函数:

pd.to_datetime('20200101').strftime('%Y-%m')

输出:
‘2020-01’

3 字符串切片截取
数据如下:
在这里插入图片描述

def date_ch(value):
    str_value=value.strftime('%Y-%m-%d')
    month=str_value[5:7]
    return month
df_temp['Time'].apply(date_ch)
#或者
#df_temp['Time'].apply(lambda x:date_ch(x))

在这里插入图片描述


strftime函数提取日期成分中,日期的标准化格式符号:

%a  星期的简写。如 星期三为Web
%A  星期的全写。如 星期三为Wednesday
%b  月份的简写。如4月份为Apr
%B  月份的全写。如4月份为April 
%c:  日期时间的字符串表示。(如: 05/01/10 09:00:20)
%d:  日在这个月中的天数
%f:  微秒(范围[0,999999])
%H:  小时(24小时制,[0, 23])
%I:  小时(12小时制,[0, 11])
%j:  日在年中的天数 [001,366]
%m:  月份([01,12])
%M:  分钟([00,59])
%p:  AM或者PM
%S:  秒(范围为[00,61])
%U:  周在当年的周数当年的第几周),星期天作为周的第一天
%w:  今天在这周的天数,范围为[0, 6],6表示星期天
%W:  周在当年的周数,星期一作为周的第一天
%x:  日期字符串(如:05/01/20)
%X:  时间字符串(如:09:00:20)
%y:  2个数字表示的年份
%Y:  4个数字表示的年份
%z:  与utc时间的间隔 (如果是本地时间,返回空字符串)
%Z:  时区名称(如果是本地时间,返回空字符串)
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中,如果我们需要处理时序数据,可能会遇到一些缺失的日期数据。这种情况下,我们可以使用Python日期时间模块(datetime)来填补缺失的日期。 首先,我们需要将日期数据化成Python中的日期格式。可以通过strptime()函数将字符串化成日期格式。然后,我们可以自己定义一个日期范围,比如从起始日期到结束日期,然后使用Python中的for循环对每个日期进行判断,如果该日期在缺失的日期列表中则补齐,否则不做处理。最后,我们可以将结果保存到一个新的数据集中。 具体的实现方法如下: 1. 将日期数据化成Python中的日期格式:使用strptime()函数将字符串化成日期,如下: ``` from datetime import datetime date_str = '2021-01-01' date = datetime.strptime(date_str, '%Y-%m-%d') ``` 2. 定义一个日期范围:使用Python中的date_range()函数定义起始日期和结束日期,如下: ``` import pandas as pd start_date = '2021-01-01' end_date = '2021-06-30' date_range = pd.date_range(start=start_date, end=end_date) ``` 3. 使用循环判断:使用Python中的for循环遍历每个日期,判断该日期是否在缺失的日期列表中。如果在,则将其补齐。 ``` missing_dates = ['2021-01-03', '2021-01-05', '2021-06-05'] new_data = [] for date in date_range: if date.strftime('%Y-%m-%d') in missing_dates: new_data.append({'date': date, 'value': None}) else: new_data.append({'date': date, 'value': ...}) ``` 4. 最后,我们可以将结果保存到一个新的数据集中,以备后续分析使用,如下: ``` df = pd.DataFrame(new_data) df.to_csv('new_data.csv', index=False) ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值