mars.dataframe.to_datetime#

mars.dataframe.to_datetime(arg, errors: 字符串 = 'raise', dayfirst: 布尔型 = False, yearfirst: 布尔型 = False, utc: 可选[布尔型] = None, format: 可选[字符串] = None, exact: 布尔型 = True, unit: 可选[字符串] = None, infer_datetime_format: 布尔型 = False, origin: 任何 = 'unix', cache: 布尔型 = True)[来源]#

将参数转换为日期时间。

Parameters
  • arg (int, float, str, datetime, list, tuple, 1-d array, Series DataFrame/dict-like) – 要转换为日期时间的对象。

  • 错误 ({'忽略', '引发', '强制转换', 默认 '引发') –

    • 如果是‘引发’,那么无效解析将引发异常。

    • 如果是‘强制转换’,那么无效解析将被设置为 NaT。

    • 如果是‘忽略’,那么无效解析将返回输入值。

  • dayfirst (bool, 默认值为 False) – 如果 arg 是字符串或其类似列表,指定日期解析顺序。 如果为 True,则按天优先解析日期,例如 10/11/12 被解析为 2012-11-10。 警告:dayfirst=True 不是严格的,但会偏向于按天优先解析 (这是一个已知的错误,基于 dateutil 的行为)。

  • yearfirst (bool, 默认值为 False) –

    如果 arg 是字符串或其列表类型,请指定日期解析顺序。

    • 如果为 True,按年份优先解析日期,例如 10/11/12 被解析为 2010-11-12。

    • 如果 dayfirst 和 yearfirst 都为 True,则 yearfirst 优先(与 dateutil 相同)。

    警告:yearfirst=True 不是严格的,但会优先按年份解析 (这是一个已知的bug,基于 dateutil 的行为)。

  • utc (bool, default None) – 如果为 True,返回 UTC DatetimeIndex(同时转换任何具有时区意识的 datetime.datetime 对象)。

  • format (str, 默认值为 None) – 用于解析时间的 strftime,例如“%d/%m/%Y”,注意“%f”将解析 直到纳秒。 有关选项的更多信息,请参见 strftime 文档: https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior.

  • exact (bool, 默认为True) – 行为如下: - 如果为True,要求格式完全匹配。 - 如果为False,允许格式在目标字符串中匹配任意位置。

  • unit (str, default 'ns') – arg的单位(D,s,ms,us,ns)表示单位,这是一个整数或浮点数。这个将基于起始点。 例如,当unit=’ms’且origin=’unix’(默认值)时,这将计算到unix纪元开始的毫秒数。

  • infer_datetime_format (bool, 默认值为 False) – 如果为 True 且未给定 format,尝试推断日期时间字符串的格式,如果可以推断,则切换到更快的解析方法。在某些情况下,这可以将解析速度提高 ~5-10 倍。

  • origin (标量, 默认 'unix') –

    定义参考日期。数值将被解析为自该参考日期以来的单位数量(由 unit 定义)。

    • 如果是‘unix’(或 POSIX)时间;origin 设置为 1970-01-01。

    • 如果是‘julian’,单位必须为‘D’,并且 origin 设置为朱利安历的开始。朱利安日数 0 被分配给公元前 4713 年 1 月 1 日中午开始的那一天。

    • 如果可转换为时间戳,origin 设置为由 origin 标识的时间戳。

  • cache (bool, 默认值为True) – 如果为True,则使用一个唯一的、转换后的日期的缓存来应用日期时间转换。当解析重复的日期字符串时,特别是带有时区偏移的字符串时,可能会显著加快速度。缓存仅在至少有50个值时使用。超出范围的值会使缓存不可用,并可能减慢解析速度。

Returns

如果解析成功。 返回类型取决于输入:

  • 类列表:DatetimeIndex

  • 序列:datetime64类型的序列

  • 标量:时间戳

在无法返回指定类型的情况下(例如,当输入的任何元素在Timestamp.min之前或在Timestamp.max之后)返回将具有datetime.datetime类型(或相应的数组/序列)。

Return type

日期时间

另请参阅

DataFrame.astype

将参数转换为指定的数据类型。

to_timedelta

将参数转换为时间增量。

convert_dtypes

转换数据类型。

示例

从DataFrame的多个列组装一个日期时间。键可以是 常见的缩写,例如 [‘year’, ‘month’, ‘day’, ‘minute’, ‘second’, ‘ms’, ‘us’, ‘ns’])或者相同的复数形式

>>> import mars.dataframe as md
>>> df = md.DataFrame({'year': [2015, 2016],
...                    'month': [2, 3],
...                    'day': [4, 5]})
>>> md.to_datetime(df).execute()
0   2015-02-04
1   2016-03-05
dtype: datetime64[ns]

如果日期不符合 timestamp limitations,传递 errors=’ignore’ 将返回原始输入,而不是引发任何异常。

传递 errors=’coerce’ 将强制将越界日期设置为 NaT,除了强制非日期(或不可解析的日期)也设置为 NaT。

>>> md.to_datetime('13000101', format='%Y%m%d', errors='ignore').execute()
datetime.datetime(1300, 1, 1, 0, 0)
>>> md.to_datetime('13000101', format='%Y%m%d', errors='coerce').execute()
NaT

传递 infer_datetime_format=True 通常可以加快解析速度,如果它不是精确的 ISO8601 格式,而是常规格式。

>>> s = md.Series(['3/11/2000', '3/12/2000', '3/13/2000'] * 1000)
>>> s.head().execute()
0    3/11/2000
1    3/12/2000
2    3/13/2000
3    3/11/2000
4    3/12/2000
dtype: object

使用Unix时间戳

>>> md.to_datetime(1490195805, unit='s').execute()
Timestamp('2017-03-22 15:16:45')
>>> md.to_datetime(1490195805433502912, unit='ns').execute()
Timestamp('2017-03-22 15:16:45.433502912')

警告

对于浮动参数,可能会发生精度舍入。为了防止意外行为,请使用固定宽度的精确类型。

使用非Unix纪元起点

>>> md.to_datetime([1, 2, 3], unit='D',
...                origin=md.Timestamp('1960-01-01')).execute()
DatetimeIndex(['1960-01-02', '1960-01-03', '1960-01-04'], dtype='datetime64[ns]', freq=None)