使用基于日期列表的DateTime索引替换Pandas DataFrame中的值

时间:2017-07-18 10:55:08

标签: python pandas

我有一个值数据框和一个日期列表。 如,

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]"

有没有人知道如何解决这个问题?我有一个非常大的数据框和日期列表...

2 个答案:

答案 0 :(得分:3)

另一种方式,

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

答案 1 :(得分:1)

您需要将该列表转换为datetime并使用loc indexer:

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

这是有效的,因为DataFrame只有一列。这会将所有列设置为零。但正如jezrael指出的那样,如果您只想将值列设置为零,则需要指定:

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