当前位置: 首页 > 面试题库 >

获取pandas数据帧的行的索引为整数

叶允晨
2023-03-14
问题内容

例如,假设一个简单的数据框

    A         B
0   1  0.810743
1   2  0.595866
2   3  0.154888
3   4  0.472721
4   5  0.894525
5   6  0.978174
6   7  0.859449
7   8  0.541247
8   9  0.232302
9  10  0.276566

给定条件,如何检索行的索引值?例如: dfb = df[df['A']==5].index.values.astype(int) return
[4],但是我想得到的只是just 4。这在以后的代码中给我带来麻烦。

基于某些条件,我想记录满足该条件的索引,然后在它们之间选择行。

我试过了

dfb = df[df['A']==5].index.values.astype(int)
dfbb = df[df['A']==8].index.values.astype(int)
df.loc[dfb:dfbb,'B']

获得所需的输出

    A         B
4   5  0.894525
5   6  0.978174
6   7  0.859449

但我明白了 TypeError: '[4]' is an invalid key


问题答案:

添加起来更容易[0]-使用一个元素选择list的第一个值:

dfb = df[df['A']==5].index.values.astype(int)[0]
dfbb = df[df['A']==8].index.values.astype(int)[0]
dfb = int(df[df['A']==5].index[0])
dfbb = int(df[df['A']==8].index[0])

但是,如果某些值不匹配,则会出现错误,因为第一个值不存在。

解决方案是使用nextiter用于获取缺省parameetr如果没有匹配的值:

dfb = next(iter(df[df['A']==5].index), 'no match')
print (dfb)
4

dfb = next(iter(df[df['A']==50].index), 'no match')
print (dfb)
no match

然后似乎需要减去1

print (df.loc[dfb:dfbb-1,'B'])
4    0.894525
5    0.978174
6    0.859449
Name: B, dtype: float64

boolean indexing或的另一种解决方案query

print (df[(df['A'] >= 5) & (df['A'] < 8)])
   A         B
4  5  0.894525
5  6  0.978174
6  7  0.859449

print (df.loc[(df['A'] >= 5) & (df['A'] < 8), 'B'])
4    0.894525
5    0.978174
6    0.859449
Name: B, dtype: float64
print (df.query('A >= 5 and A < 8'))
   A         B
4  5  0.894525
5  6  0.978174
6  7  0.859449


 类似资料:
  • 我有两个形状相同的python数据帧,例如: 我想使用df2中的值作为行索引来选择df1中的值,并创建一个形状相等的新数据帧。预期结果: 我已尝试使用.loc,它在单个列中运行良好: 但是我不能同时在所有列上使用. loc或. iloc。我想避免循环来优化性能,因为我正在处理一个大数据帧。有什么想法吗?

  • 问题内容: 我有以下DataFrame: 如您所见,列用作索引。我想获取该行的序数,在这种情况下应该是。 被测试的列可以是索引列(在这种情况下也可以)或常规列,例如,我可能想找到满足条件的行的索引。 问题答案: 您可以这样使用np.where: 返回的值是一个数组,因为一列中可能有多个具有特定索引或值的行。

  • 我有一个目录,其中.csv文件包含60分钟的股票数据条,还有一个Python脚本,用于将它们全部加载到熊猫数据框中,并在符号和日期时间上建立索引,如下所示; 第一次打印返回以下内容; 第二次打印返回以下内容:; 如何在数据帧中找到这一行的行索引,然后获得一个切片,该切片是由前一行、当前行和下一个10行组成的12行?

  • 我有一个熊猫,如下所示: 我想按进行分组并获取每个组的第一行: 预期成果: 我尝试了下面的方法,它只给出了< code>DataFrame的第一行。任何关于这方面的帮助都将不胜感激。

  • 假设是一个数据帧。 只接受名字 只接受整数(实际放置) 接受名称和整数: 当引用行时,只希望获得名称。例如 抛出一个错误,它不会返回“2”。 当引用列时,iloc更喜欢整数,而不是名称。例如 返回“三”,而不是2。(尽管返回)。 奇怪的是,我喜欢完全相反的功能。通常我的列名非常有意义,所以在我的代码中我直接引用它们。但是由于大量的观察清理,我的熊猫数据帧中的行名称通常不对应于。 我意识到我可以使用

  • 问题内容: 我的问题与此非常相似,但是我需要转换整个数据框,而不仅仅是转换一系列数据框。该功能一次只能在一个系列上使用,不能很好地替代不推荐使用的命令。有没有办法获得与新熊猫版本中的命令相似的结果? 谢谢MikeMüller的示例。如果所有值都可以转换为整数,则效果很好。如果在我的数据帧中我有无法转换为整数的字符串怎么办?例: 然后,我可以运行不赞成使用的函数并获取: 运行命令会给我错误,即使尝试