切片Pandas DataFrame显示特定日期的所有记录

时间:2017-11-09 17:48:39

标签: python python-3.x pandas

我想返回一个数据框,该数据框仅包含给定日期时间值的特定日期的记录。

以下代码正在运作:

incoming_status = "none"

是否有更好(更快)的方法来实现这一目标?

1 个答案:

答案 0 :(得分:1)

由于索引是DatetimeIndex,您可以使用字符串对其进行切片。

考虑数据框df

np.random.seed([3,1415])
df = pd.DataFrame(np.random.randint(10, size=(10, 3)),
                  pd.date_range('2016-03-31', periods=10, freq='12H'),
                  list('ABC'))

df

                     A  B  C
2016-03-31 00:00:00  0  2  7
2016-03-31 12:00:00  3  8  7
2016-04-01 00:00:00  0  6  8
2016-04-01 12:00:00  6  0  2
2016-04-02 00:00:00  0  4  9
2016-04-02 12:00:00  7  3  2
2016-04-03 00:00:00  4  3  3
2016-04-03 12:00:00  6  7  7
2016-04-04 00:00:00  4  5  3
2016-04-04 12:00:00  7  5  9

不是您想要的
您不想使用Timestamp

df.loc[pd.to_datetime('2016-04-01')]

A    0
B    6
C    8
Name: 2016-04-01 00:00:00, dtype: int64

<强>代替
你可以使用这种技术:

df.loc['{:%Y-%m-%d}'.format(pd.to_datetime('2016-04-01'))]

                     A  B  C
2016-04-01 00:00:00  7  3  1
2016-04-01 12:00:00  0  6  6

您的功能

def dataframeByDay(datetimeValue):
    return df.loc['{:%Y-%m-%d}'.format(datetimeValue)]

dataframeByDay(pd.to_datetime('2016-04-01'))

                     A  B  C
2016-04-01 00:00:00  7  3  1
2016-04-01 12:00:00  0  6  6

以下是一些替代方法

def dataframeByDay2(datetimeValue):
    dtype = 'datetime64[D]'
    d = np.array('{:%Y-%m-%d}'.format(datetimeValue), dtype)
    return df[df.index.values.astype(dtype) == d]

def dataframeByDay3(datetimeValue):
    return df[df.index.floor('D') == datetimeValue.floor('D')]