pandas.core.indexing.IndexingError:索引器太多

xyhw6mcr  于 2023-03-28  发布在  其他
关注(0)|答案(2)|浏览(222)

我想提取站点2的用电量

>>> df4 = pd.read_excel(xls, 'Elec Monthly Cons')
>>> df4
     Site Unnamed: 1 2014-01-01 00:00:00 2014-02-01 00:00:00 2014-03-01 00:00:00         ...         2017-08-01 00:00:00 2017-09-01 00:00:00 2017-10-01 00:00:00 2017-11-01 00:00:00 2017-12-01 00:00:00
0    Site    Profile            JAN 2014            FEB 2014            MAR 2014         ...                    AUG 2017            SEP 2017            OCT 2017            NOV 2017            DEC 2017
1  Site 1        NHH               10344                 NaN                 NaN         ...                         NaN                 NaN                 NaN                 NaN                 NaN
2  Site 2         HH              258351              229513              239379         ...                         NaN                 NaN                 NaN                 NaN                 NaN

类型

type(df4)
<class 'pandas.core.frame.DataFrame'>

我的目标是取出数值,但我不知道如何正确地设置指数,我一直尝试到现在都没有效果。

df1 = df.loc[idx[:,1:2],:]

但是

raise IndexingError('Too many indexers')
pandas.core.indexing.IndexingError: Too many indexers

我好像不太懂索引。系列类型有什么作用吗?

df.head
<bound method NDFrame.head of Site                   Site 2
Unnamed: 1                 HH

编辑

print (df.index)
Index([             'Site',        'Unnamed: 1', 2014-01-01 00:00:00,
       2014-02-01 00:00:00, 2014-03-01 00:00:00, 2014-04-01 00:00:00,
       2014-05-01 00:00:00, 2014-06-01 00:00:00, 2014-07-01 00:00:00,

如何解决这个问题?

23c0lvtd

23c0lvtd1#

在我看来是必要的删除:,因为这意味着选择所有列,但Series没有列。
此外,它似乎没有MultiIndex,所以然后需要:

df1 = df.iloc[1:2]

前2行是标头,因此对于多索引 Dataframe 需要:

df4 = pd.read_excel(xls, 'Elec Monthly Cons', header=[0,1], index_col=[0,1])

然后选择用途:

idx = pd.IndexSlice
df1 = df.loc[:, idx[:,'FEB 2014':'MAR 2014']]
pobjuy32

pobjuy322#

我在错误地使用pd.apply函数(使用axis选项)时得到了这个错误,它每行返回一个Pandas系列(Pandas系列没有列)
示例

#Before apply 
print(df.iloc[:,1]) # ok
df = df.apply(lambda row :(tokenizer(row[0]).input_ids,tokenizer(row[1]).input_ids), axis=1 )
print(df.iloc[:,1]) # NOT OK, throws pandas.core.indexing.IndexingError: Too many indexers

您可以使用iloc来选择 Dataframe 的特定行,并使用[]表示法获得序列的第n个元素。但您不能执行类似df.iloc[:,1]的操作,即选择所有行,但仅包含第二列的值。

相关问题