如何从数据框中分割唯一的日期数据?

时间:2019-06-02 22:09:19

标签: python dataframe

现有的日期切片方法通常会提取两个日期之间的数据,但不能提取特殊日期。我的问题是切片不同日期的数据。 我的数据框由以下内容给出:

df =                           A         B
     2019-03-21 19:15:00   21.787958  16.728439  
     2019-03-25 19:16:00   20.983078  15.865983 
     2019-03-29 19:17:00   20.122042  15.073062  

我想在第21天和第29天提取数据。我的代码如下: 代码1:

df.index == ['2019-03-21','2019-03-29']

输出:

ValueError: Lengths must match

代码2:

df['2019-03-21','2019-03-29']

输出:

KeyError: ('2019-03-21', '2019-03-25')

您能帮我在这里找到错误吗?

2 个答案:

答案 0 :(得分:1)

这里发生的事情很少。首先,当您使用“ ==”将一个列表与另一个列表进行比较时,它不一定会返回逐元素比较-您必须使用pandas内置的“ isin”方法。

第二,当您将掩码传递给数据框以对其进行过滤时,掩码需要具有与数据框中的行数相同的元素数。

第三,您有一个要与日期进行比较的日期时间索引,因此必须首先提取日期组件才能进行比较。

df=pd.DataFrame({'A':[21.787958,20.983078,20.122042], 'B':16.728439,15.865983,15.073062]})
df.index=pd.to_datetime(['2019-3-21 19:15:0','2019-3-25 19:16:0','2019-3-29 19:17:0'])

这是过滤后的数据帧:

df[pd.to_datetime(df.index.date).isin(pd.to_datetime(['2019-03-21','2019-03-29']))]

答案 1 :(得分:0)

您可以使用

df.loc[df['date_column'].isin(['2019-03-21','2019-03-29'])]  

 df[(df['A'] == '2019-03-21') | (df['A'] ==  '2019-03-29')] 

您编写的df.index仅给出行的索引。例如,如果您运行:

for i in df.index: 
    print(i)

它返回0,1,2,这是行索引。但是您要寻找的是df['date_column']特定列的内容,因此您应该将此列中的值与所需内容进行比较。