我写了一个简短的代码来说明让我困惑的是:
import numpy as np
import pandas as pd
a = [0.2,0.4]
f = np.linspace(0.0,4.0,5)
mindex = pd.MultiIndex.from_product([a,f], names=['a', 'f'])
df = pd.DataFrame(dtype=float, index=range(0,100), columns=mindex)
有关DataFrame的打印结构,请参阅编辑。现在,我想知道如何专门使用.loc
为特定元素赋值。显然,以下内容:
print(df.loc[0, 0.2, 0.0])
给我错误:
pandas.core.indexing.IndexingError: Too many indexers
但我不明白为什么?以下两个语句按预期工作:
print(df.loc[0])
print(df.loc[0,0.2])
以print(df.loc[0,0.2])
为例输出:
f
0.0 NaN
1.0 NaN
2.0 NaN
3.0 NaN
4.0 NaN
Name: 0, dtype: float64
但是如何才能获得最终的f=0.0
值?
另外,我的下一个想法是使用元组索引的元组,但print(df.loc[0,[0.2,0.0]])
也不起作用。
编辑:只是为了澄清我的DataFrame的结构。
print(df)
给出:
a 0.2 0.4
f 0.0 1.0 2.0 3.0 4.0 0.0 1.0 2.0 3.0 4.0
0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
3 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
4 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
...
...
编辑2:只是在评论后更新,基本上有两个建议是使用df.loc[0][0.2][0.0]
或df[[(0.2,0.0)]].loc[0]
。但是,由于我需要将值分配给特定元素,因此大熊猫似乎不鼓励这两者(参见http://pandas.pydata.org/pandas-docs/stable/indexing.html#returning-a-view-versus-a-copy)。
实际上,df.loc[0][0.2][0.0] = 2
似乎有效,但df[[(0.2,0.0)]].loc[0] = 2
没有(因为它返回切片的副本而不是视图)。