使用iloc和loc的结合

15

我想要结合iloc和loc,有可能吗?

具体来说,我想要:

  • 以 (:train_size) 的形式给出整数作为行的值

  • 提供一个包含列名称的列表作为列的值(替换下面代码中的 [0,1])

    training_set = dataset.iloc[:train_size,[0,1]].values

尝试中。

training_set = dataset.loc[:train_size,[list_input_and_y_parameters]].values

出现错误信息

TypeError:无法对中的这些索引器[4275]执行切片索引

有没有办法做到这一点?

非常感谢


我认为我们需要更多的信息来明确这一点。例如,我们需要知道你的“数据集”是什么样子的,有哪些列和索引? - rafaelc
2个回答

21
你可以链接此操作或仅使用 ilocIndex.get_indexer 用于列表中列的位置:
training_set = dataset.iloc[:train_size].loc[:, ['col1','col2']].values

training_set = dataset.iloc[:train_size, df.columns.get_indexer(['col1','col2'])].values

2
我认为使用 Index.get_indexer 是最好的选择,因为它还可以与赋值一起使用。 - Dr Fabio Gori
你知道在第一个例子中使用链式索引是否被认为是正确的吗?文档不鼓励使用诸如dfmi ['one'] ['second']之类的链式索引,但它并没有涵盖链式loc。https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy - etotheipi
@etotheipi 在使用链接的 loc 时,我也收到了相同的警告,因此我认为这不是一个正确的方法。 - Garnagar
@Garnagar - 你可以尝试使用 training_set = dataset.iloc[:train_size].loc[:, ['col1','col2']].copy() 吗? - jezrael
1
我们需要遵循多么复杂的方法才能使像 df[0, 'col'] = 10 这样简单的操作生效啊!Pandas 真的需要让按索引分配到特定行和按名称分配到特定列变得更加容易。 - Praveen

4

由于链式使用 lociloc 可能会导致 SettingWithCopyWarning 异常,一种不需要使用 Index.get_indexer 的选项是(假设索引中没有重复项):

training_set = dataset.loc[dataset.index[:train_size], ['col1','col2']].values

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接