mpn*_*ny1 5 python dataframe pandas datetimeindex
我正在生成一个空数据框,其中包含一系列日期作为索引.数据将在稍后添加到数据框中.
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
Run Code Online (Sandbox Code Playgroud)
一些切片方法似乎不起作用.以下返回KeyError:
df['2017-01-02']
Run Code Online (Sandbox Code Playgroud)
但是,以下任何工作:
df['2017-01-02':'2017-01-02']
df.loc['2017-01-02']
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么?为什么第一个切片不返回结果?
MYG*_*YGz 13
[]在df[]:inside时[],其中的值将被视为列.:在里面使用时,它里面[]的值将被视为行.因为大多数时候人们想要切片而不是切片.因此,他们决定x,y在df[x:y]应该对应行x中d[x]或者x,y在df[[x,y]]应该对应于列(S).
df = pd.DataFrame(data = [[1,2,3], [1,2,3], [1,2,3]],
index = ['A','B','C'], columns = ['A','B','C'])
print df
Run Code Online (Sandbox Code Playgroud)
输出:
A B C
A 1 2 3
B 1 2 3
C 1 2 3
Run Code Online (Sandbox Code Playgroud)
现在,当你这样做时df['B'],它可能意味着两件事:
拿第二个索引B给你第二行1 2 3
OR
Run Code Online (Sandbox Code Playgroud)取第二列B,给你第二列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]