2017-07-18 112 views
1

我有一个数据框的值和一个日期列表。 例如,用基于日期列表的DateTime索引替换Pandas DataFrame中的值

data = pd.DataFrame([1,3,5,7,2,3,9,1,3,8,4,5],index=pd.date_range(start='2017-01-01',periods=12),columns=['values']) 

我想用一个零值来代替日期列表中的日期值。例如,

date_list = ['2017-01-04', '2017-01-07', '2017-01-10'] 

我曾尝试:

data[date_list] == 0 

但是这会产生错误:

KeyError: "None of [['2017-01-04', '2017-01-07', '2017-01-10']] are in the [index]" 

任何人都不会有如何解决这个想法?我有一个非常大的数据帧和日期列表...

回答

1

您需要在列表转换为datetime和使用LOC索引:

data.loc[pd.to_datetime(date_list)] = 0 

data 
Out[19]: 
      values 
2017-01-01  1 
2017-01-02  3 
2017-01-03  5 
2017-01-04  0 
2017-01-05  2 
2017-01-06  3 
2017-01-07  0 
2017-01-08  1 
2017-01-09  3 
2017-01-10  0 
2017-01-11  4 
2017-01-12  5 

这工作,因为数据帧只有一列。这将所有列设置为零。但随着jezrael指出的那样,如果你只想值列设置为零,你需要指定:

data.loc[pd.to_datetime(date_list), 'values'] = 0 
+0

我认为更好的解决办法,也许,如果需要指定列'data.loc [pd.to_datetime(date_list),'values'] = 0' – jezrael

+0

@jezrael啊是的,我一直在犯这个错误。谢谢。 – ayhan

+1

不,我认为你的解决方案很好,如果需要更换所有列。这取决于OP;) – jezrael

2

的另一种方式,

In [11]: data[data.index.isin(date_list)] = 0 

In [12]: data 
Out[12]: 
      values 
2017-01-01  1 
2017-01-02  3 
2017-01-03  5 
2017-01-04  0 
2017-01-05  2 
2017-01-06  3 
2017-01-07  0 
2017-01-08  1 
2017-01-09  3 
2017-01-10  0 
2017-01-11  4 
2017-01-12  5 
相关问题