pandas 数据框中 YYYYMMDDHHMMSS 的日期

Date of YYYYMMDDHHMMSS in pandas data frame

我的数据框包含一个 IGN_DATE 列,其中值的格式为 20080727142700,格式为 YYYYMMDDHHMMSS。 列类型为 float64.

如何获得时间、日期(没有 00:00:00)、日、月的单独列。

我尝试了什么:

列名称IGN_DATE 数据框-df

df['IGN_DATE'] = df['IGN_DATE'].apply(str)

df['DATE'] = pd.to_datetime(df['IGN_DATE'].str.slice(start = 0, stop = 8))
df['MONTH'] = df['IGN_DATE'].str.slice(start = 4, stop = 6).astype(int)
df['DAY'] = df['IGN_DATE'].str.slice(start = 6, stop = 8).astype(int)
df['TIME'] = df['IGN_DATE'].str.slice(start = 8, stop = 13)

  1. DATE 的格式为 YYYY-MM-DD 00:00:00。我不想在 DATE 00:00:00。
  2. 如何将字符串类型的时间获取到 HH:MM:SS?
  3. 有没有更简单的方法来做到这一点?

如果 nan 值不重要,可以 dropna then convert to_datetime with a specified format then use the dt accessor 访问所需的值:

# Drop Rows with nan in IGN_DATE column
df = df.dropna(subset=['IGN_DATE'])
# Convert dtype to whole number then to `str`
df['IGN_DATE'] = df['IGN_DATE'].astype('int64').astype(str)
# Series of datetime values from Column
s = pd.to_datetime(df['IGN_DATE'], format='%Y%m%d%H%M%S')
# Extract out and add to DataFrame from `s`
df['DATE'] = s.dt.date
df['MONTH'] = s.dt.month
df['DAY'] = s.dt.day
df['TIME'] = s.dt.time

否则可以屏蔽 IGN_DATE 中的 notna 值并仅分配那些行:

# Mask not null values
m = df['IGN_DATE'].notna()
# Convert to String
df.loc[m, 'IGN_DATE'] = df.loc[m, 'IGN_DATE'].astype('int64').astype(str)
# Series of datetime values from Column
s = pd.to_datetime(df['IGN_DATE'], format='%Y%m%d%H%M%S')
# Extract out and add to DataFrame from `s`
df.loc[m, 'DATE'] = s.dt.date
df.loc[m, 'MONTH'] = s.dt.month
df.loc[m, 'DAY'] = s.dt.day
df.loc[m, 'TIME'] = s.dt.time

样本 DF:

import numpy as np
import pandas as pd

df = pd.DataFrame({'IGN_DATE': [20080727142700, np.nan, 20151015171807]})

示例输出 dropna:

         IGN_DATE        DATE  MONTH  DAY      TIME
0  20080727142700  2008-07-27      7   27  14:27:00
2  20151015171807  2015-10-15     10   15  17:18:07

带掩码的示例输出:

         IGN_DATE        DATE  MONTH   DAY      TIME
0  20080727142700  2008-07-27    7.0  27.0  14:27:00
1             NaN         NaN    NaN   NaN       NaN
2  20151015171807  2015-10-15   10.0  15.0  17:18:07