我有一个值数据框和一个日期列表。 如,
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]"
有没有人知道如何解决这个问题?我有一个非常大的数据框和日期列表...
答案 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