gpt4 book ai didi

python - 无法使用日期作为字符串来切片 Pandas 数据框(以日期为键)

转载 作者:太空狗 更新时间:2023-10-30 00:24:00 26 4
gpt4 key购买 nike

我正在生成一个以一系列日期作为索引的空数据框。稍后会将数据添加到数据框中。

cbd=pd.date_range(start=pd.datetime(2017,01,02),end=pd.datetime(2017,01,30),period=1)

df = pd.DataFrame(data=None,columns=['Test1','Test2'],index=cbd)

df.head()
Test1 Test2
2017-01-02 NaN NaN
2017-01-03 NaN NaN
2017-01-04 NaN NaN
2017-01-05 NaN NaN
2017-01-06 NaN NaN

有几个切片方法好像不行。以下返回 KeyError:

df['2017-01-02']

但是以下任何一项都有效:

df['2017-01-02':'2017-01-02']
df.loc['2017-01-02']

我在这里错过了什么?为什么第一个切片没有返回结果?

最佳答案

[]df[] 中的双重行为

  • 如果您不在 [] 中使用 :,则其中的值将被视为列。
  • 当您在 [] 中使用 : 时,其中的值将被视为行。

为什么是双重性?

因为大多数时候人们想要对行进行切片而不是对列进行切片。

所以他们决定df[x:y]中的xy应该对应行,

xd[x]x, ydf[[x ,y]] 应该对应于列。

例子:

df = pd.DataFrame(data = [[1,2,3], [1,2,3], [1,2,3]],
index = ['A','B','C'], columns = ['A','B','C'])
print df

输出:

   A  B  C
A 1 2 3
B 1 2 3
C 1 2 3

现在当你执行 df['B'] 时,它可能意味着两件事:

  • 取第二个索引 B 并给你第二行 1 2 3

                     OR
  • 取第 2 列 B 并给你第 2 列 2 2 2

所以为了解决这个冲突并保持明确,df['B'] 将始终意味着您想要列 'B',如果没有这样的列然后它会抛出一个错误。

为什么 df['2017-01-02'] 会失败?

它将搜索列'2017-01-02',因为没有这样的列,它会抛出错误。

为什么 df.loc['2017-01-02'] 会起作用?

因为 .loc[]df.loc[row,column] 的语法,如果你愿意,你可以省略列,就像你的情况一样,它简单的意思是 df.loc[row]

关于python - 无法使用日期作为字符串来切片 Pandas 数据框(以日期为键),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41922786/

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