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

我在带有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

更多详细信息

简单地使用索引会导致关键错误:

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

出现KeyError是因为您尝试通过查找名为DataFrame的列来返回"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]"

您的第二个选项不能与str索引一起使用,您应该使用如上所述的exact indexing。

这些令人惊讶的(?)导致相同的序列如下:

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

如果在单行上使用.loc,则您将看到强制输入Series的强制。因此,您将转换为DataFrame,然后转置结果。

有没有一种方法可以通过指定时间范围将两个表在时间列上的大熊猫中连接在一起? - python

说我有两个数据帧df1和df2。它们都具有以下形式的列Date/Time 01-06-2013 23:00:00 02-06-2013 01:00:00 02-06-2013 21:00:00 02-06-2013 22:00:00 02-06-2013 23:00:00 我想要一个功能join_temporal(range=<num>, uni…

用大写字母拆分字符串,但忽略AAA Python Regex - python

我的正则表达式:vendor = "MyNameIsJoe. I'mWorkerInAAAinc." ven = re.split(r'(?<=[a-z])[A-Z]|[A-Z](?=[a-z])', vendor) 以大写字母分割字符串,例如:'我的名字是乔。 I'mWorkerInAAAinc”变成…

如何在python中将从PDF提取的文本格式化为json - python

我已经使用pyPDF2提取了一些文本格式的发票PDF。我想将此文本文件转换为仅包含重要关键字和令牌的json文件。输出应该是这样的:#PurchaseOrder {"doctype":"PO", "orderingcompany":"Demo Company", "su…

Python:将两列组合在一起,找到第三列的总和 - python

python真的很新,需要我完成的问题需要一些帮助。我需要根据用户对月份(MM)和年份(YYYY)的输入来找到每个时间段(月/年)的平均收入。我的输入如下:year_value = int(input("Year (YYYY): ")) month_value = int(input("Month (MM): ")) …

查找字符串中的行数 - python

我正在创建一个python电影播放器​​/制作器,我想在多行字符串中找到行数。我想知道是否有任何内置函数或可以编写代码的函数来做到这一点:x = """ line1 line2 """ getLines(x) python大神给出的解决方案 如果换行符是'\n',则nlines …