Pandas:从DatetimeIndex中提取值

olmpazwi  于 2022-11-05  发布在  其他
关注(0)|答案(4)|浏览(211)

我有一个Pandas DataFrame,它的行和列是一个DatetimeIndex。

import pandas as pd

data = pd.DataFrame(
    {
        "PERIOD_END_DATE": pd.date_range(start="2018-01", end="2018-04", freq="M"),
        "first": list("abc"),
        "second": list("efg")
    }
).set_index("PERIOD_END_DATE")

data.columns = pd.date_range(start="2018-01", end="2018-03", freq="M")
data

不幸的是,当我尝试提取一个值时,我得到了各种错误:

data['2018-01', '2018-02']       # InvalidIndexError: ('2018-01', '2018-02')
data['2018-01', ['2018-02']]     # InvalidIndexError: ('2018-01', ['2018-02'])
data.loc['2018-01', '2018-02']   # TypeError: only integer scalar arrays can be converted to a scalar index
data.loc['2018-01', ['2018-02']] # KeyError: "None of [Index(['2018-02'], dtype='object')] are in the [columns]"

如何从使用DatetimeIndex的DataFrame中提取值?

bbmckpt7

bbmckpt71#

有2个问题:
1.由于您使用的是DateTimeIndex Dataframe ,因此在行和列之间遍历的正确表示法为:

a) data.loc[rows_index_name, [column__index_name]]

b) data.loc[rows_index_name, column__index_name]

这取决于所需的输出类型。
Notation A将返回序列值,而notation (b)将返回字符串值。
1.索引名称不能被截断-必须指定整个字符串。
因此,您的问题将通过以下方式解决:

data.loc['2018-01-31',['2018-01-31']] or data.loc['2018-01-31','2018-01-31']
hc8w905p

hc8w905p2#

只要你已经将日期设置为索引,你就不能切片或提取它的任何数据。你可以提取它的月份和日期,因为它是一个常规列,而不是当它是一个索引。我以前遇到过这个问题,这就是解决办法。
我将其作为常规列保留,将月、日和年提取为每个列的单独列,然后将日期列指定为索引列。

mwg9r5ms

mwg9r5ms3#

在日期列上作为句点(YYYY-MM)进行访问。在这种情况下,这将有所帮助
第一个

frebpwbc

frebpwbc4#

时间戳索引是非常挑剔的。Pandas接受下面的每一个表达式,但是它们返回不同的类型。

data.loc['2018-01',['2018-01-31']]
    data.loc['2018-01-31',['2018-01-31']]
    data.loc['2018-01','2018-01-31']
    data.loc['2018-01-31','2018-01']
    data.loc['2018-01-31','2018-01-31']

相关问题