gpt4 book ai didi

python - 使用数组对带有周期索引的 Pandas 数据帧进行切片

转载 作者:行者123 更新时间:2023-11-30 23:03:36 26 4
gpt4 key购买 nike

我正在尝试对由句点索引索引的 pandas 数据帧进行切片,其中包含一个字符串列表,但结果出乎意料。

import pandas as pd
import numpy as np
idx = pd.period_range(1991,1993,freq='A')
df = pd.DataFrame(np.arange(9).reshape(3,3),index=idx)
print df.loc[['1991','1993'],:]

结果:

KeyError: "None of [['1991', '1993']] are in the [index]"

如果最后一行切换为:

print df.ix[['1991','1993'],:]

输出为

Out[128]:
0 1 2
1991 NaN NaN NaN
1993 NaN NaN NaN

如果我没有周期索引

idx = [str(year) for year in range(1991,1994)]
print df.loc[['1991','1993'],:]

然后输出如预期:

Out[127]:
0 1 2
1991 0 1 2
1993 6 7 8

所以我的问题是:如何使用周期索引对 pandas 数据帧进行切片?

最佳答案

Pandas 不会为您将字符串转换为句点,因此您必须更加明确。您可以使用:

In [38]: df.loc[[pd.Period('1991'), pd.Period('1993')], :]
Out[38]:
0 1 2
1991 0 1 2
1993 6 7 8

In [39]: df.loc[map(pd.Period, ['1991', '1993']), :]
Out[39]:
0 1 2
1991 0 1 2
1993 6 7 8

In [40]: df.loc[[idx[0],idx[-1]], :]
Out[40]:
0 1 2
1991 0 1 2
1993 6 7 8
<小时/>

顺便说一句,当您将任意项目列表传递给 df.loc 时,Pandas 会返回一个新的子 DataFrame,其中包含来自 df 的值的副本 。这不是切片。要切片,您需要使用切片符号:a:b。例如,

In [64]: df.loc[pd.Period('1991'): pd.Period('1993'): 2, :]
Out[64]:
0 1 2
1991 0 1 2
1993 6 7 8

这种区别很重要,因为在 NumPy 和 Pandas 中 slices return views while non-slice indexing return copies

关于python - 使用数组对带有周期索引的 Pandas 数据帧进行切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34020777/

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