使用DatetimeIndex设置Pandas的set_Value [Python]

5
我将尝试使用df.set_Value将函数的按行结果添加到我的数据框中。 df的格式为:
    Count   DTW
DateTime        
2015-01-16  10  0
2015-01-17  28  0

使用 df.setValue
dw.set_Value(idx, 'col', dtw) # idx and dtw are int values

TypeError: cannot insert DatetimeIndex with incompatible label

我该如何解决这个错误,或者有什么效率相当的替代方法?
1个回答

5
我认为你拥有的是Series,而不是DataFrame,所以请使用将索引转换为datetime后使用Series.set_value进行操作。请参考Series.set_value
dw = pd.Series([-2374], index = [pd.to_datetime('2015-01-18')])
dw.index.name = 'DateTime'
print (dw)
DateTime
2015-01-18   -2374
dtype: int64

print (dw.set_value(pd.to_datetime('2015-01-19'), 1))
DateTime
2015-01-18   -2374
2015-01-19       1
dtype: int64

print (dw.set_value(pd.datetime(2015, 1, 19), 1))
DateTime
2015-01-18   -2374
2015-01-19       1
dtype: int64

更标准的方法是使用ixiloc

print (dw)
            Count  DTW
DateTime              
2015-01-16     10    0
2015-01-17     28    0

dw.ix[1, 'DTW'] = 10
#dw.DTW.iloc[1] = 10
print (dw)
            Count  DTW
DateTime              
2015-01-16     10    0
2015-01-17     28   10

我正在从一个范围中获取idx值,所以我想直接使用int值进行分配,但我认为这会导致索引问题,因为它不是按数字顺序排列的,而是按DateTime索引排列的。希望这样能澄清我的问题。 - SerialDev
你是否有一个包含intdatetime值的第一个索引?或者需要覆盖一些值,例如样例中的28?或者添加新行? - jezrael
我想在具有日期时间索引的现有行上设置一个值,是否有可迭代的对象可以用来获取日期时间索引而不是整数? - SerialDev
1
你觉得像 dw.DTW.iloc[1] = 10 这样的语句可行吗? - jezrael
由于某些我不明白的原因,感谢@jezrael,它起作用了。 - SerialDev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接