没有日期在索引和for循环中

时间:2018-03-21 07:26:58

标签: python pandas indexing

有一个销售数据框,索引的类型为: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)

但我想进一步了解错误的原因,以及解决方法是否不是“糟糕的惯例”。

1 个答案:

答案 0 :(得分:1)

我认为需要转换为日期时间,因为按日期时间列表选择:

some_dates = pd.to_datetime(['3/15/2016', '3/14/2016'])

更一般的是datetimeindexsome_dates之间的intersection

some_dates = pd.to_datetime(['3/15/2016', '6/14/2016'])

idx = df.index.intersection(some_dates)
print(df.loc[idx])
  

但我想进一步了解错误的原因,以及解决方法是不是一个糟糕的约定'。

在我看来,大熊猫的主要原因是最好避免所有循环,如果存在另一个,往往是矢量化的解决方案。循环显然比较慢。

您还可以查看this