我正在尝试将pandas系列数据传递给date_range乐趣,并且遇到错误以下提示,如何在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.Timestamp中,文件“ pandas / _libs / tslibs / timestamps.pyx”,第748行。pandas._libs.tslibs.conversion.convert_to_tsobject中的第288行的新文件“ pandas / _libs / tslibs / conversion.pyx”,pandas._libs.tslibs中的第487行“ pandas / _libs / tslibs / conversion.pyx”。 conversion.convert_str_to_tsobject ValueError :(“无法将字符串转换为时间戳”,在索引0处发生)
IIUC,您需要在应用函数之前将日期列转换为datetime,请尝试以下操作:
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句