我有一个从另一个数据帧过滤掉的数据帧。它们显然具有相同的列和值,但是当我将循环应用于过滤后的列和值时,我得到一个Key错误:0,而在原始的列中没有问题。 这是两个数据框:
原始的是这个:
ISIN ISSUE DATE MATURITY PRICE
0 AR121489 Corp 29/03/2019 29/09/2019 97.314000
1 AR714081 Corp 29/06/2019 29/12/2019 97.014500
2 AT452141 Corp 29/12/2019 29/06/2020 92.959000
3 QJ100923 Corp 29/03/2020 29/09/2020 96.696222
通过这个从CSV读取的数据,我转换了数据以对其进行过滤:
df['ISSUE DATE mod'] = df['ISSUE DATE'].apply(lambda x: dt.datetime.strptime(x,'%d/%m/%Y'))
df['MATURITY mod'] = df['MATURITY'].apply(lambda x: dt.datetime.strptime(x,'%d/%m/%Y'))
df['ISSUE DATE mod'] = df['ISSUE DATE mod'].astype('datetime64[ns]').copy()
df['MATURITY mod'] =df['MATURITY mod'].astype('datetime64[ns]').copy()
然后我过滤数据框以获得该数据框:
fval = dt.date(2019,7,29)
np.datetime64(fecha_valoracion)
df2= df.loc[(tabla_info_bonos['ISSUE DATE mod'] < fval) & (df['MATURITY mod'] > fval)]
我得到了这个数据框:
ISIN ISSUE DATE MATURITY ISSUE DATE mod MATURITY mod
0 AR121489 Corp 29/03/2019 29/09/2019 2019-03-29 2019-09-29
1 AR714081 Corp 29/06/2019 29/12/2019 2019-06-29 2019-12-29
然后,如果我对原始数据帧执行以下操作,则它可以工作,但对过滤后的数据帧则不行:
maturity = []
for i in range(len(df2['MATURITY'])):
maturities = pd.to_datetime(df2['MATURITY'][i]).date()
maturity.append(maturities)
OUTPUT = KeyError: 0
我怀疑问题出在过滤部分,但我不知道如何解决。 任何帮助都将是完美的,我将非常感谢
答案 0 :(得分:0)
我觉得最后的for循环有问题
maturity = []
for i in range(len(df2['MATURITY'])):
maturities = pd.to_datetime(df2['MATURITY'][i]).date()
maturity.append(maturities)
代替上面的代码,您能不能尝试以下类似的方法
maturity = []
for item in df2['MATURITY']:
maturity.append(pd.to_datetime(item).date())
或者您也可以使用列表理解
maturity = [pd.to_datetime(item).date()for item in df2['MATURITY']]
答案 1 :(得分:0)
重置数据帧的索引。过滤后的数据框的索引与原始数据框中的索引相对应。
df2 = df2.reset_index(drop = True)