给定一系列索引范围切片的复杂iloc逻辑



我有一个str,看起来像这样:

paired_str = '[3584: 71943, 74593: 78252, 79205: 85318, 86152: 92030, 93207: 96977]'

这些是索引范围的切片,我想通过iloc逻辑从数据帧调用它们。目标是从本质上使用它,并绘制一个图,专门绘制paired_str中那些索引范围的数据。

到目前为止我尝试过的:

paired_ranges = df.iloc[np.r_[paired_str]]

然而,这会产生错误

ValueError: invalid literal for int() with base 10: '3584: 71943'

我不理解的部分是,如果我手动键入范围,它会很好地工作,即:

paired_ranges = df.iloc[np.r[3584: 71943, 74593: 78252, 79205: 85318, 86152: 92030, 93207: 96977]

然而,我想通过编程来实现这一点,因为将有数百个这样的范围切片列表。我尝试了很多不同的方法,但都没有成功,所以任何帮助都将不胜感激!

非常感谢您的阅读!

注意:一旦它工作起来,我想把它画出来:seaborn示例:

sns.scatterplot(data=paired_ranges, x=var1, y=var2, size = 1)

不能仅用代码的字符串表示来替换代码。字符串对python来说没有任何意义,它首先需要被解析才能用作代码。在您的例子中,您试图创建一个slice()对象的列表(注意,a:b只是slice(a,b)的语法糖(,但您只提供了一个字符串。因此,我们需要将该字符串转换为切片对象列表,例如:

paired_str = '[3584: 71943, 74593: 78252, 79205: 85318, 86152: 92030, 93207: 96977]'
paired_ints = (map(int, pair.split(':')) for pair in paired_str[1:-1].split(','))
slices = tuple(*map(lambda start_stop: slice(*start_stop), paired_ints))

现在slices中的切片对象实际上可以用于索引。

相关内容

  • 没有找到相关文章

最新更新