gpt4 book ai didi

python - 使用 DatetimeIndex 选择单行作为数据框

转载 作者:行者123 更新时间:2023-12-02 06:52:58 27 4
gpt4 key购买 nike

我在数据框中有一个带有 DatetimeIndex 的时间序列,如下所示:

import pandas as pd
dates= ["2015-10-01 00:00:00",
"2015-10-01 01:00:00",
"2015-10-01 02:00:00",
"2015-10-01 03:00:00",
"2015-10-01 04:00:00"]
df = pd.DataFrame(index=pd.DatetimeIndex(dates))
df["values"] = range(0,5)

Out[]:
values
2015-10-01 00:00:00 0
2015-10-01 01:00:00 1
2015-10-01 02:00:00 2
2015-10-01 03:00:00 3
2015-10-01 04:00:00 4

我想尽可能简单地清理选择看起来像这样的行,基于日期作为关键,例如“2015-10-01 02:00:00”:

Out[]:
values
2015-10-01 02:00:00 2

仅使用索引会导致关键错误:

df["2015-10-01 02:00:00"]
Out[]:
KeyError: '2015-10-01 02:00:00'

类似这样:

df.loc[["2015-10-01 02:00:00"]]
Out[]:
KeyError: "None of [['2015-10-01 02:00:00']] are in the [index]"

这些令人惊讶的(?)结果相同的系列如下:

df.loc["2015-10-01 02:00:00"]
Out[]:
values 2
Name: 2015-10-01 02:00:00, dtype: int32

df.loc["2015-10-01 02:00:00",:]
Out[]:

values 2
Name: 2015-10-01 02:00:00, dtype: int32

print(type(df.loc["2015-10-01 02:00:00"]))
print(type(df.loc["2015-10-01 02:00:00",:]))
print(df.loc["2015-10-01 02:00:00"].shape)
print(df.loc["2015-10-01 02:00:00",:].shape)
Out[]:
<class 'pandas.core.series.Series'>
<class 'pandas.core.series.Series'>
(1,)
(1,)

我可以将其中任何一个包装在 DataFrame 中,如下所示:

slize = pd.DataFrame(df.loc["2015-10-01 02:00:00",:])
Out[]:
2015-10-01 02:00:00
values 2

当然我可以这样做来达到我的结果:

slize.T
Out[]:
values
2015-10-01 02:00:00 2

但在这一点上,我也可以期望一列作为一个系列,但很难测试它是行系列还是列系列来自动添加 T。我是否错过了选择我想要的内容的方法?

最佳答案

我建议使用 pd.date_range 生成索引为了方便,然后使用.locTimestampdatetime目的。

from datetime import datetime

import pandas as pd

start = datetime(2015, 10, 1, 0, 0, 0)
end = datetime(2015, 10, 1, 4, 0, 0)
dates = pd.date_range(start, end, freq='H')
df = pd.DataFrame(index=pd.DatetimeIndex(dates))
df["values"] = range(0,5)

然后你可以使用.locTimestampdatetime目的。

In [2]: df.loc[[start]]
Out[2]:
values
2015-10-01 0

更多详细信息

Simply using indexing results in a key error:

df["2015-10-01 02:00:00"]
Out[]:
KeyError: '2015-10-01 02:00:00'

KeyError发生的原因是您尝试返回 DataFrame 的 View 通过查找名为 "2015-10-01 02:00:00" 的列

Similarly this:

df.loc[["2015-10-01 02:00:00"]]
Out[]:
KeyError: "None of [['2015-10-01 02:00:00']] are in the [index]"

您的第二个选项无法与 str 一起使用索引,你应该使用 exact indexing如前所述。

These surprisingly (?) result in the same series as follows:

df.loc["2015-10-01 02:00:00"]
Out[]:
values 2
Name: 2015-10-01 02:00:00, dtype: int32

如果您使用.loc在单行上,您将强制 Series键入您注意到的内容。因此,您应将其转换到 DataFrame然后转置结果。

关于python - 使用 DatetimeIndex 选择单行作为数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48076276/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com