将字符串值转换为datetim

2024-05-18 20:54:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前有一个dataframe,它有一列包含日期时间值作为对象数据类型。你知道吗

    col1    col2            col3
0    A       10     2016-06-05 11:00:00
0    B       11     2016-06-04 00:00:00
0    C       12     2016-06-02 05:00:00
0    D       13     2016-06-03 02:00:00

我要做的是将col3转换成日期时间值,这样它就可以给出:

 Year-Month-Day-Hour

以后的一些datetime特性工程。当我尝试时:

df['col3'] = pd.to_datetime(df['col3'])

我得到这个错误:

OutOfBoundsDatetime: Out of bounds nanosecond timestamp: 3008-07-25 00:00:00

有什么想法吗?你知道吗

谢谢


Tags: 对象dataframedfdatetime时间特性工程year
1条回答
网友
1楼 · 发布于 2024-05-18 20:54:36

可以使用参数errors='coerce'将超出限制的值转换为NaT

print (df)
  col1  col2                 col3
0    A    10  2016-06-05 11:00:00
0    B    11  2016-06-04 00:00:00
0    C    12  2016-06-02 05:00:00
0    D    13  3008-07-25 00:00:00

df['col3'] = pd.to_datetime(df['col3'], errors='coerce')
print (df)
  col1  col2                col3
0    A    10 2016-06-05 11:00:00
0    B    11 2016-06-04 00:00:00
0    C    12 2016-06-02 05:00:00
0    D    13                 NaT

Timestamp limitation

In [68]: pd.Timestamp.min
Out[68]: Timestamp('1677-09-21 00:12:43.145225')

In [69]: pd.Timestamp.max
Out[69]: Timestamp('2262-04-11 23:47:16.854775807')

也可以从字符串创建Periods,但不容易:

def conv(x):
    return pd.Period(year = int(x[:4]), 
                     month = int(x[5:7]), 
                     day = int(x[8:10]),
                     hour = int(x[11:13]), freq='H')

df['col3'] = df['col3'].apply(conv)

print (df)
  col1  col2             col3
0    A    10 2016-06-05 11:00
0    B    11 2016-06-04 00:00
0    C    12 2016-06-02 05:00
0    D    13 3008-07-25 00:00

相关问题 更多 >

    热门问题