首页 > 解决方案 > 尝试将熊猫系列数据传递给 date_range 函数时,无法将字符串转换为时间戳错误

问题描述

我正在尝试将 pandas 系列数据传递给 date_range fun,但我遇到了错误,如何将字符串类型转换为 pandas 中的时间戳

import pandas as pd
import numpy as np
from pandas.tseries.offsets import CustomBusinessHour
from pandas.tseries.holiday import USFederalHolidayCalendar

data = {
    'start': ['2019-08-23 00:01:46.697000',
              '2018-10-29 19:01:10.887000',
              '2018-10-22 17:42:24.467000'],
    'end': ['2019-08-26 17::00.830000',
            '2018-11-27 09:31:39.967000',
            '2018-11-28 18:33:35.243000' ]
}
df = pd.DataFrame(data)

bh = CustomBusinessHour(calendar=USFederalHolidayCalendar(), start='00:01', end='23:59')

def f(x):
    idx = pd.date_range(start=x.start, end=x.end, freq= bh)
    mask = ~((idx.dayofweek == 0) & (idx.hour <= 7))
    return len(idx[mask])

df['Hours_diff'] = df.apply(f, axis=1)
print(df.head(10))

文件“pandas/_libs/tslibs/timestamps.pyx”,第 748 行,在 pandas._libs.tslibs.timestamps.Timestamp 中。 文件“pandas/_libs/tslibs/conversion.pyx”,第 288 行,在 pandas._libs.tslibs.conversion.convert_to_tsobject 文件“pandas/_libs/tslibs/conversion.pyx”,第 487 行,在 pandas._libs.tslibs。 conversion.convert_str_to_tsobject ValueError: ('无法将字符串转换为时间戳',你'发生在索引 0')

标签: pythonpandasnumpy

解决方案


IIUC,您需要在应用函数之前将日期列转换为日期时间试试这个:

pd.to_datetime(df['start'])
pd.to_datetime(df['end'])

bh = CustomBusinessHour(calendar=USFederalHolidayCalendar(), start='00:01', end='23:59')

def f(x):
    idx = pd.date_range(start=x.start, end=x.end, freq= bh)
    mask = ~((idx.dayofweek == 0) & (idx.hour <= 7))
    return len(idx[mask])

df['Hours_diff'] = df.apply(f, axis=1)
print(df.head(10))

输出:

                        start                         end  Hours_diff
0  2019-08-23 00:01:46.697000  2019-08-26 17:00:00.830000          34
1  2018-10-29 19:01:10.887000  2018-11-27 09:31:39.967000         426
2  2018-10-22 17:42:24.467000  2018-11-28 18:33:35.243000         574

推荐阅读