【问题标题】:Comparing just the time component of two datetime64 columns仅比较两个 datetime64 列的时间分量
【发布时间】:2021-02-16 18:08:42
【问题描述】:

我试图减去或比较 两个 datetime64 列的时间分量,但没有成功。我尝试使用带有异常块的 strftime 来捕获 NaT,但没有运气。任何帮助深表感谢。我附上了下面的 Python 代码。

Column A          Column B
1/1/1900 10:00      NaT
1/1/1900 10:30      NaT
1/1/1900 11:00      NaT
1/1/1900 9:00     2/6/2021 23:59
1/1/1900 11:00    2/6/2021 8:59
1/1/1900 9:30     2/6/2021 16:00

def convert(x):
    try:
        return x.strftime("%H:%M:%S")
    except ValueError:
        return x

df['B'].apply(convert)-df['A'].apply(convert)

我收到错误 TypeError: unsupported operand type(s) for -: 'NaTType' and 'str'

【问题讨论】:

    标签: python-3.x pandas datetime


    【解决方案1】:

    使用pd.to_datetime 将两列转换为pandas datetime。然后使用Series.dt.time 提取时间:

    df['Column A'] = pd.to_datetime(df['Column A'])
    df['Column B'] = pd.to_datetime(df['Column B'])
    
    In [213]: (df['Column A'] - df['Column B']).dt.components
    Out[213]: 
          days  hours  minutes  seconds  milliseconds  microseconds  nanoseconds
    0      NaN    NaN      NaN      NaN           NaN           NaN          NaN
    1      NaN    NaN      NaN      NaN           NaN           NaN          NaN
    2      NaN    NaN      NaN      NaN           NaN           NaN          NaN
    3 -44232.0    9.0      1.0      0.0           0.0           0.0          0.0
    4 -44231.0    2.0      1.0      0.0           0.0           0.0          0.0
    5 -44232.0   17.0     30.0      0.0           0.0           0.0          0.0
    

    从上面可以分别提取hoursminutes等:

    In [215]: (df['Column A'] - df['Column B']).dt.components.hours
    Out[215]: 
    0     NaN
    1     NaN
    2     NaN
    3     9.0
    4     2.0
    5    17.0
    Name: hours, dtype: float64
    

    【讨论】:

    • 这不起作用,TypeError: unsupported operand type(s) for -: 'datetime.time' and 'datetime.time' in the last step df['Column A'].dt.time - df['B 列'].dt.time
    猜你喜欢
    • 2010-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-16
    • 2012-12-01
    • 2011-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多