在原点中不包含相应变量时,使用默认值转换序列中的日期时间格式



我正在从csv文件导入数据。我的df上的一列是一个包含日期时间信息的列,但它的数据在某种程度上是动态的。有时包含时间信息,有时不包含;有时它会通知时区,有时则不会。

数据以2516 non-null object开始

以下是一个只有日期、没有时间也没有时区的系列示例:

datetime
0       2020-08-15
1       2020-08-14
2       2020-08-13
3       2020-08-12  

我正在使用pd.to_datetimedt.strftime转换为日期时间以更改数据格式。所以对于下面的代码。。。

df['datetime'] = df['datetime'].apply(pd.to_datetime, format='%Y-%m-%d')
df['datetime'] = df['datetime'].dt.strftime('%y-%m-%d-%Z-%H-%M-%S')

和样本数据,我最终得到以下输出:

0       20-08-15--00:00:00
1       20-08-14--00:00:00
2       20-08-13--00:00:00
3       20-08-12--00:00:00

注意,有两个--在一起,因为在原点中没有时区,并且%Z什么都不返回;并且时间值最终为CCD_ 6,因为它们也没有被提供。

我想实现的是,当原点没有提供时区时,在时区中添加一个默认值,这样就变得明确了;并添加默认时间值来填充原点也不提供的条目。

有可能像我们对函数参数的默认值那样做一些事情吗?

def funct(arg1, arg2=x, arg3="xyz") 

如果您想使用本地化,您需要说明您的区域设置。

import datetime as dt
import pandas as pd
df = pd.DataFrame({"date":pd.date_range(dt.datetime(2020,8,12), dt.datetime(2020,8,15))})
df["datestr"] = df["date"].dt.tz_localize("Europe/London").dt.strftime('%y-%m-%d-%Z-%H-%M-%S')

输出

date                datestr
2020-08-12  20-08-12-BST-00-00-00
2020-08-13  20-08-13-BST-00-00-00
2020-08-14  20-08-14-BST-00-00-00
2020-08-15  20-08-15-BST-00-00-00

这类事情我的首选是dateutil。因此,对于您的案例:

from dateutil.parser import parse
from dateutil import tz 
dt = parse('1970-01-01 12:00+0')
datetime.datetime(1970, 1, 1, 12, 0, tzinfo=tzutc())
parse('2020-08-15', default=dt)                                                                                                                                           
datetime.datetime(2020, 8, 15, 12, 0, tzinfo=tzutc())
print(parse('2020-08-15', default=dt))                                                                                                                                    
2020-08-15 12:00:00+00:00

dt被创建为用于解析的模板。输入日期时间字符串未提供的任何内容都将替换为模板值。在这种情况下是时间和时区。您可以将其替换为应用函数。

最新更新