我正在从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_datetime
和dt.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
被创建为用于解析的模板。输入日期时间字符串未提供的任何内容都将替换为模板值。在这种情况下是时间和时区。您可以将其替换为应用函数。