我有一个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
中的切片对象实际上可以用于索引。