2017-07-18 75 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 
相關問題