日期计算(类型错误:不支持的操作数类型(一个或多个),用于: - “STR”和“STR”)
问题描述:
我已经设置如下数据:日期计算(类型错误:不支持的操作数类型(一个或多个),用于: - “STR”和“STR”)
date_time srch_co srch_ci
0 2014-11-03 16:02:28 2014-12-19 2014-12-15
1 2013-03-13 19:25:01 2013-03-14 2013-03-13
2 2014-10-13 13:20:25 2015-04-10 2015-04-03
3 2013-11-05 10:40:34 2013-11-08 2013-11-07
4 2014-06-10 13:34:56 2014-08-08 2014-08-03
5 2014-12-16 14:34:39 2014-12-17 2014-12-16
这是数据集的信息:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 100000 entries, 0 to 99999
Data columns (total 3 columns):
date_time 100000 non-null datetime64[ns]
srch_co 99878 non-null object
srch_ci 99878 non-null object
dtypes: datetime64[ns](1), object(2)
memory usage: 2.3+ MB
我想什么做的是使用下面的函数创建两个新栏目:
def duration(row):
delta = (row['srch_co'] - row['srch_ci'])/np.timedelta64(1, 'D')
if delta <= 0:
return np.nan
else:
return delta
sample['duration'] = sample.apply(duration, axis=1)
def days_in_advance(row):
delta = (row['srch_ci'] - row['date_time'])/np.timedelta64(1, 'D')
if delta < 0:
return np.nan
else:
return delta
sample['days_in_advance'] = sample.apply(days_in_advance, axis=1)
然而,这似乎是日期计算我想不断运行出现错误。我搜索并找到了几个解决方案并尝试了一下,但是它们会造成错误或将日期变为不准确的值。
我试图使用方法,如:
#1)
def to_integer(dt_time):
return 10000*dt_time.year + 100*dt_time.month + dt_time.day
#2)
datetime.strptime(str(row[2]), '%Y%m%d%H%M%S')
#3)
pd.to_numeric(sample['date_time'], errors='coerce')
#4)
sample['srch_ci_int'] = sample['srch_ci'].astype(str).astype(int)
我只是想创建新列,将计算每列的区别:
sample["duration"] = sample["srch_co"] - sample["srch_ci"]
sample["days_in_advance"] = sample["srch_co"] - sample["date_time"]
任何提示赞赏。
答
把所有的底片成南你需要转换srch_co
和srch_ci
to_datetime
第一列,然后使用mask
少替换值0
到NaN
(默认值mask
函数):
sample["srch_co"] = pd.to_datetime(sample["srch_co"])
sample["srch_ci"] = pd.to_datetime(sample["srch_ci"])
sample["duration"] = (sample["srch_co"] - sample["srch_ci"])/np.timedelta64(1, 'D')
sample["days_in_advance"] = (sample["srch_co"] - sample["date_time"])/np.timedelta64(1, 'D')
cols = ['duration','days_in_advance']
sample[cols] = sample[cols].mask(sample[cols] < 0)
#first value of srch_ci column was changed for NaN output
print (sample)
date_time srch_co srch_ci duration days_in_advance
0 2014-11-03 16:02:28 2014-12-19 2015-12-15 NaN 45.331620
1 2013-03-13 19:25:01 2013-03-14 2013-03-13 1.0 0.190961
2 2014-10-13 13:20:25 2015-04-10 2015-04-03 7.0 178.444155
3 2013-11-05 10:40:34 2013-11-08 2013-11-07 1.0 2.555162
4 2014-06-10 13:34:56 2014-08-08 2014-08-03 5.0 58.434074
5 2014-12-16 14:34:39 2014-12-17 2014-12-16 1.0 0.392604
答
好像你正在从字符串中减去一个字符串。确保将列转换为使用pd.to_datetime键入'date',然后您将能够从另一天减去一天。
另一个建议是避免使用循环并使用矢量化操作,例如pd.DataFrame.subtract(series,axis = 0),因为这是使用熊猫在任何简单列表上最大的优点之一。
你计算后的差值,那么你可以说
dataframe[dataframe['duration'] < 0] = np.nan
从我们在这里的信息,我会假设简单地转换th e列'srch_ *'到'datetime'对象可以提供帮助。 –
对,我不知道为什么我没有想过这件事。谢谢! '样品[ 'srch_co'] = pd.to_datetime(样品[ 'srch_co']) 样品[ 'srch_ci'] = pd.to_datetime(样品[ 'srch_ci'])' 这个工作。 – tmhs