1
我想在另一个数据帧列中增加一个整数值的日期。在pandas数据框中添加其他数据帧的日期
我收到类型错误:为timedelta天组件不支持的类型:numpy.int64
我dataframes是这样的:
import pandas as pd
import numpy as np
import datetime as dt
dfa = pd.DataFrame([
['5/15/17',1],
['5/15/17',1]],
columns = ['Start','Days'])
dfb = pd.DataFrame([
['5/15/17',1],
['5/15/17',1]],
columns = ['Start','Days'])
我格式化 '开始' 列,使用此代码日期时间:
dfa['Start'] = dfa['Start'].apply(lambda x:
dt.datetime.strptime(x,'%m/%d/%y'))
dfb['Start'] = dfb['Start'].apply(lambda x:
dt.datetime.strptime(x,'%m/%d/%y'))
我尝试更改dfa数据框中的值。在DFB数据框参考作品“天”,但不是“开始”:
for i, row in dfb.iterrows():
for j, row in dfa.iterrows():
new = pd.DataFrame({"Start": dfa.loc[j,"Start"] + datetime.timedelta(days=dfb.loc[i,"Days"]), "Days": dfa.loc[j,"Days"] - dfb.loc[i,"Days"]}, index = [j+1])
dfa = pd.concat([dfa.ix[:j], new, dfa.ix[j+1:]]).reset_index(drop=True)
这是引发错误的关键组成部分:
“开始”:dfa.loc [J,“开始” ] + datetime.timedelta(天= dfb.loc [我, “天”]
它正常工作,如果我使用:
“开始”:dfa.loc [J, “开始”] +的日期时间。 timedelta(天= 1)
但我需要它采取临时来自dfb的t值,不是一个静态整数。
这似乎像它应该工作,它与您的代码的做法,但当我将它作为dfb.loc [i,'Days'] apply(pd.Timedelta,unit ='D')放入我的实际代码中时,它引发:AttributeError:'numpy.int64'对象没有属性'apply' 。 – swysell
哦,但如果我删除“.loc [我,”它确实有效。我假设我需要保留那个索引的参考,但也许情况并非如此? – swysell
关于熊猫的一件很酷的事情是,它本质上是做索引对齐的事情。如果dfa和dfb看起来相似,那么它将对齐索引。如果dfa和dfb处于不同的排序顺序,您也可以在两者上使用set_index('Date')来获得对齐。 –