首页 > 编程问答 >使用.loc切片时Series为空

使用.loc切片时Series为空

时间:2024-07-21 09:52:31浏览次数:13  
标签:python pandas series

我想获取 Q1 到 Q9 之间的项目。

我使用 .loc 对系列对象进行切片:

s.loc['Q1':'Q2']

但是它返回一个空系列。

Series([], dtype: object)

通常,我应该返回

['Q1 ',' Q2 ',' Q3 ',' Q4 ',' Q5 ',' Q6 ',' Q7 ',' Q8 ',' Q9 ']

Q1到Q9存在并且它们是连续的。当我运行以下命令时我可以看到它们

for i in s:
    print(i)
Q1
Q2
Q3
Q4
Q5
Q6
Q7
Q8
Q9
Q10
Q11
Q12
Q13
Q14
Q15

问题在于正在尝试使用 .loc 来切片 标签 ,而的系列对象的索引可能不是 'Q1', 'Q2', ... 等。.loc 切片器期望标签是 已排序的 . 如果的标签未排序,则 'Q1':'Q9' 将被解释为一个 空的切片 ,因为它找不到从 'Q1' 开始 并以 'Q9' 结束 有序序列

可以尝试以下方法来解决此问题:

1. 使用位置切片:

如果只想获取系列中的前 9 个元素,则可以使用 位置切片 ,如下所示:

s.iloc[:9]

这将返回系列的前 9 个元素,而不管它们的标签是什么。

2. 使用布尔索引:

可以使用布尔索引来选择标签在 'Q1' 和 'Q9' 之间的元素。

s[s.isin(['Q1', 'Q2', 'Q3', 'Q4', 'Q5', 'Q6', 'Q7', 'Q8', 'Q9'])]

这将创建一个布尔掩码,该掩码选择标签位于指定列表中的元素。

3. 重置索引(如果需要):

如果要使用标签切片,并且希望标签成为索引,则可以重置索引:

s = s.reset_index(drop=True)
s.loc[:8]  # 现在可以使用位置切片,因为索引已排序

这会将标签转换为列,并将默认的数字索引分配给系列。然后,可以使用 .loc 切片器,因为它现在正在使用排序的数字索引。

请注意,在进行任何切片之前,检查系列的索引总是一个好主意。可以使用 s.index 查看索引。这将帮助了解为什么切片可能无法按预期工作。

标签:python,pandas,series
From: 78771287

相关文章

  • 我在 Python 时间格式化函数中遇到代码问题
    我一直在研究一个Python函数,将给定的秒数转换为可读的时间格式(HH:MM:SS)。该函数对于大多数测试用例都能正常工作,但对于一些特定的输入会失败。这是我编写的函数:defmake_readable(seconds):ifseconds<60:s1=secondsh1,m1=(0,0)return......
  • 《流畅的Python》第二版 第11章
     fromarrayimportarrayimportmathclassVector2d:__match_args__=('x','y')typecode='d'def__init__(self,x,y):self.__x=float(x)self.__y=float(y)@propertydefx(self)......
  • 《流畅的Python》第二版 第12章
       fromarrayimportarrayimportmathimportfunctoolsimportitertoolsimportoperatorimportreprlibclassVector:typecode='d'def__init__(self,components):self._components=array(self.typecode,components)......
  • 如何在Python中给jupyter单元标准输入?
    我正在尝试在接受用户输入的jupyter笔记本上运行一个程序,但我不知道如何让它读取标准输入。例如,如果我使用shift-enter:a=input()print(a)运行代码,则单元格指示它正在运行,但不接受我的输入。我如何让它接受输入?你遇到的问题是Jupyternotebook中的代码单元默认......
  • Python:如何从 csvreader 列表中删除括号和单引号?
    Pythonn00b在这里。尝试使用csvreader从文件导入数组并打印一个值,但它添加了括号和单引号。这是我的代码:importrandomimportcsvwithopen('crimes.csv','r')ascsvfile:crimes=list(csv.reader(csvfile))hello=["Hello","Greetings","Hi&q......
  • Python 中的多行输入,支持空行并在控制台中检查“\n”
    您好,亲爱的社区,在解决某个竞赛任务时出现了问题。我解决了它,但由于输入棘手而无法交付。我在谷歌上搜索并尝试了几种找到的方法,但如果应用于此任务,它们中的每一种都有一些弱点。而且我无法完全重现所应用的输入,因为它嵌入在竞赛界面中;我可能只依赖描述。这就是为什么我......
  • pandas.parser.CParserError:标记数据时出错
    我正在尝试使用pandas操作.csv文件,但收到此错误:pandas.parser.CParserError:标记数据时出错。C错误:第3行应有2个字段,看到12我尝试阅读pandas文档,但什么也没找到。我的代码很简单:path='GOOGKeyRatios.csv'#print(open(path).read())data=p......
  • Python Pandas - 读取 CSV 或 Excel
    我允许用户上传CSV或Excel文件。我正在使用pandas读取文件并创建数据框。由于我无法预测用户将上传哪种文件类型,因此我将pd.read_csv()和pd.read_excel()包装在try/except块中。ifform.validate_on_submit():input_filename=secure_filename(form.file.da......
  • 如何在 python 脚本中调用 robocopy 来批量复制多个文件夹?
    我正在尝试在网络驱动器之间移动多个大文件夹(>10Gb、>100个子文件夹、>2000个文件)。我尝试过在python中使用Shutil.copytree命令,它工作得很好,只是由于不同的原因它无法复制一小部分(<1%的文件)。我相信robocopy对我来说是最好的选择,因为我可以创建一个记录传输过......
  • 如何在Python中使用装饰器动态创建类方法?
    我正在开发一个Python项目,我需要在运行时动态地为类创建方法。我想使用装饰器根据一些外部配置将这些方法添加到类中。要求是:装饰器应该从外部配置(例如字典)读取方法定义。装饰器应该动态地将这些方法添加到类中。每个生成的方法都应具有配置中指定的自己唯一的实现。以......