有一个销售数据框,索引的类型为:date-time。
rng = pd.date_range('2015-01-03', periods=500)
df = pd.DataFrame({'historical_sales': np.random.choice([100,200,300],
size=500)}, index=rng)
print (df)
我们还有一个特殊日期列表,some_dates:
some_dates = ['3/15/2017, '6/14/2017'.....]
尝试通过some_dates对数据框进行子集化:
print(df.loc[some_dates])
我得到一个关键错误,“[[date]]都不在[index]中。 这是因为我是在设置字符串列表而不是日期时间吗?
作为一种解决方法,为了对数据框进行子集化,这有效:
container = []
for i in some_dates:
container.append(df.loc[i])
dfNew = pd.DataFrame(container)
但我想进一步了解错误的原因,以及解决方法是否不是“糟糕的惯例”。
答案 0 :(得分:1)
我认为需要转换为日期时间,因为按日期时间列表选择:
some_dates = pd.to_datetime(['3/15/2016', '3/14/2016'])
更一般的是datetimeindex
和some_dates
之间的intersection
:
some_dates = pd.to_datetime(['3/15/2016', '6/14/2016'])
idx = df.index.intersection(some_dates)
print(df.loc[idx])
但我想进一步了解错误的原因,以及解决方法是不是一个糟糕的约定'。
在我看来,大熊猫的主要原因是最好避免所有循环,如果存在另一个,往往是矢量化的解决方案。循环显然比较慢。
您还可以查看this。