Python字符串和日期时间格式转换
- 前言:
- 1.字符串和日期时间转换
- 终论:给定月份的上月月份(YYYYMM)
- 1.1格式YYYYMM变成YYYYMMDD
- 1.2字符串转换为时间格式
- 1.3时间格式加减
- 1.4时间格式转换为字符串
- 2.Pandas的DataFrame时间格式转换
前言:
- 字符串转日期:
datetime.datetime.strptime(date_string, format)
,两个参数必要参数
示例1:datetime.datetime.strptime('20230120', '%Y%m%d')
返回 2023-01-20 00:00:00
- 日期转字符串:
Timestamp.strftime("%Y-%m-%d")
,Timestamp是原数据格式
示例2:datetime.datetime.now().strftime("%Y-%m-%d")
返回 2024-02-05
示例3:datetime.datetime.today().strftime("%Y-%m-%d")
返回 2024-02-05
-
pandas的DataFrame时间列转字符串:
pd.Series.dt.strftime('%Y%m%d')
,pd.Series是具体的列 -
pandas的DataFrame字符串列转日期:
[datetime.datetime.strptime(i, '%Y%m%d') for i in pd.Series]
,pd.Series是具体的列
1.字符串和日期时间转换
终论:给定月份的上月月份(YYYYMM)
要求根据输入数据的月份,返回格式为YYYYMM的上月月份,后续内容都是这个内容的逐步实现
import datetimev_part = '202302'date_result = (datetime.datetime.strptime(v_part + '01', '%Y%m%d') + datetime.timedelta(days=-1)).strftime("%Y%m")print(type(date_result))
print(date_result)
返回结果
<class 'str'>
202301
1.1格式YYYYMM变成YYYYMMDD
这是字符串和字符串直接的转换
import datetimev_part = '202311'# 格式YYYYMM变成YYYYMMDD
v_date = v_part + '01'print(type(v_date))
print(v_date)
返回结果
<class 'str'>
20231101
1.2字符串转换为时间格式
字符串转换为时间格式,使用 datetime.datetime.strptime(date_string, format)
,两个参数:字符串和日期格式
import datetimev_part = '202311'# 格式YYYYMM变成YYYYMMDD
v_date = v_part + '01'# 字符串转换为时间格式
date_yyyymmdd = datetime.datetime.strptime(v_date, '%Y%m%d')print(type(date_yyyymmdd))
print(date_yyyymmdd)
返回结果
<class 'datetime.datetime'>
2023-11-01 00:00:00
1.3时间格式加减
时间格式加减,通过 datetime.timedelta(days=nums)
,具体增减时间定为nums值即可,增加一天写1,减去一天写-1,由源码 __slots__ = '_days', '_seconds', '_microseconds', '_hashcode'
可知这里支持的时间类型
import datetimev_part = '202302'# 格式YYYYMM变成YYYYMMDD
v_date = v_part + '01'# 字符串转换为时间格式
date_yyyymmdd = datetime.datetime.strptime(v_date, '%Y%m%d')# 时间格式加减
date_yesterday = datetime.datetime.strptime(v_date, '%Y%m%d') + datetime.timedelta(days=-1)print(type(date_yesterday))
print(date_yesterday)
1.4时间格式转换为字符串
时间转换为字符串用 strftime(format)
格式
import datetimev_part = '202302'# 格式YYYYMM变成YYYYMMDD
v_date = v_part + '01'# 字符串转换为时间格式
date_yyyymmdd = datetime.datetime.strptime(v_date, '%Y%m%d')# 时间格式加减
date_yesterday = datetime.datetime.strptime(v_date, '%Y%m%d') + datetime.timedelta(days=-1)# 时间格式转换为字符串
date_result = date_yesterday.strftime("%Y-%m-%d")print(type(date_result))
print(date_result)
返回结果
<class 'str'>
2023-01-31
2.Pandas的DataFrame时间格式转换
时间格式的列可以转换为string、int,同样string、int类型可以转换为时间格式
import datetime
import pandas as pd# 构建一个带时间格式的 DataFrame
result = pd.DataFrame([[1, datetime.datetime.now()],[2, datetime.datetime.today() + datetime.timedelta(days=-1)],[3, datetime.datetime.today() + datetime.timedelta(days=1)],[4, datetime.datetime.today() + datetime.timedelta(days=-381)]],columns=['编号', '日期时间'])# 根据时间格式的列,生成一个 int 类型 YYYYMMDD 格式的列
result['日期'] = result['日期时间'].dt.strftime('%Y%m%d').astype(int)# 根据 int 类型 YYYYMMDD 格式的列,生成一个 日期格式 的列。列表生成式或lambda表达式都行
result['日期格式'] = [datetime.datetime.strptime(i, '%Y%m%d') for i in result['日期'].astype(str)]
print(result)
print(result.dtypes)
返回结果
声明:本文所载信息不保证准确性和完整性。文中所述内容和意见仅供参考,不构成实际商业建议,可收藏可转发但请勿转载,如有雷同纯属巧合。