当前位置: 首页 > 知识库问答 >
问题:

Python中的数据帧切片失败

翟高明
2023-03-14

我想用Python对数据进行切片。分割数据帧的基本任务会给我带来意想不到的错误。

我的代码是:

import pandas as pd

test_file = pd.read_csv("C:/Users/Lenovo/Desktop/testfile.csv")
test_select = test_file[["Category", "Shop"]]
print(test_select[1,1])

代码打印(测试选择[1,1])应显示第二列的第二行。

错误html" target="_blank">消息:

文件“pandas_libs\hashtable_class_helper.pxi”,第1500行,在pandas中_图书馆。哈希表。PyObjectHashTable。get_项键错误:(1,1)

在处理上述异常期间,发生了另一个异常:

回溯(最近一次调用):文件“C:/Users/Lenovo/.PyCharmCE2018.1/config/scratches/Dictionary.py”,第8行,打印(h_select[1,1])文件“C:\Users\Lenovo\PycharmProjects\mindnotez\venv\lib\site packages\pandages\core\frame.py”,第2688行,在getitem return self中_getitem_列(键)文件“C:\Users\Lenovo\PycharmProjects\mindnotez\venv\lib\site packages\pandas\core\frame.py”,第2695行,在_getitem_列返回self_获取项目缓存(密钥)文件“C:\Users\Lenovo\PycharmProjects\mindnotez\venv\lib\site packages\pandas\core\generic.py”,第2489行,位于项目缓存值=self中_数据获取(项目)文件“C:\Users\Lenovo\PycharmProjects\mindnotez\venv\lib\site packages\pandas\core\internals.py”,第4115行,在get loc=self中。项目。获取get_loc return self中第3080行的位置(项目)文件“C:\Users\Lenovo\PycharmProjects\mindnotez\venv\lib\site packages\pandas\core\index\base.py”_发动机获取pandas中第140行的loc(self.\u可能\u cast\u indexer(key))文件“pandas\u libs\index.pyx”_图书馆。指数IndexEngine。获取pandas中第162行的文件“pandas\u libs\index.pyx”_图书馆。指数IndexEngine。在pandas中获取第1492行的文件“pandas\u libs\hashtable\u class\u helper.pxi”_图书馆。哈希表。PyObjectHashTable。获取pandas中第1500行的项目文件“pandas\u libs\hashtable\u class\u helper.pxi”_图书馆。哈希表。PyObjectHashTable。get_项键错误:(1,1)

当我打印print(test_select.head())时,我得到以下输出:

     Category           Shop
0       Jidlo         Albert
1       Jidlo          BILLA
2       Jidlo         Albert
3       Jidlo         Albert
4  Restaurant  Kockafé Freyd

print(test_select[1:4])一样切片数据帧,打印行1:3。使用命令print(test_select[1,1]),我想要第二列,第二行。但是,我收到上面的错误消息。

为什么我会收到KeyError异常?我错过了什么?

我使用:

  • Python 3.7
  • PyCharm
  • 蟒蛇(已安装)

共有3个答案

寿鸣
2023-03-14

使用loc这是使用索引和列,而不是位置,这里的索引似乎是从0到n,因此在切片行时loc等于iloc

df.loc[1,'Shop']
'BILLA'
谭健柏
2023-03-14

代码打印(测试选择[1,1])应显示第二列的第二行。

不,不应该。语法df[x]通常用于检索列(系列)、布尔行索引或行切片。pd的这些用法。__getitem__,其中df[]是语法糖,没有方便的记录。一般来说,它们应该被视为快捷方式,如果您不确定,您应该选择loc/iloc/at/iat,视情况而定。

要通过整数位置索引检索标量值,可以使用pd。数据帧。iat

df.iat[1, 1]
陶淳
2023-03-14

当您想要分割数据帧时

按行号

df.iloc[[1, 5]] # to get rows 1 and 5

df.iloc[1:6] # to get rows 1 to 5 inclusive

您还可以将其缩小到特定列,如下所示(以避免链索引)

df.iloc[[1, 5], df.columns.get_loc('Shop')]

或多个列

df.iloc[[1, 5], df.columns.get_indexer(['Shop', 'Category'])]

基于标签的索引

# Numeric
df.loc[[1, 5]] # 1 and 5 are considered labels here
df.loc[[1, 5], 'Shop']
df.loc[[1, 5], ['Shop', 'Category']]

# Textual or otherwise
df.set_index('Shop', inplace=True)
df.loc[['BILLA', 'Albert'], 'Category']
 类似资料:
  • 我正在使用从h5文件加载的调查数据作为通过熊猫包。在此中,所有行都是单个调查的结果,而列是单个调查中所有问题的答案。 我的目标是将此数据集缩减为更小的,仅包括在某个问题上具有某个描述答案的行,即在本列中具有相同的值。我能够确定具有此条件的所有行的索引值,但我找不到如何删除这些行或仅使用这些行创建新的df。

  • 我有一个小数据框,比如说: 我想有一个列的滚动平均值,所以我这样做: 它的工作原理是,我有一个名为的新列,其中包含我期望它包含的内容,但我也会收到警告消息: 试图在数据帧切片的副本上设置值。尝试改用.loc[row\u indexer,col\u indexer]=value 请参阅文档中的注意事项:http://pandas.pydata.org/pandas-docs/stable/index

  • 问题内容: 我在Databricks工作。 我有一个包含500行的数据框,我想创建两个包含100行的数据框,另一个包含剩余的400行。 我尝试了以下操作,但收到错误消息 问题答案: 最初,我误会了,并以为您想分割这些列。如果要选择行的子集,一种方法是使用创建索引列。从文档: 保证生成的ID是单调递增且唯一的,但不是连续的。 您可以使用此ID对数据框进行排序,并使用该ID对其子集进行排序,以确保准确

  • 我有一个光谱仪的波长和吸光度输入文件。在这个文件中,数据被记录并作为数据帧的最后两列添加。柱需要指定测量特定吸光度(=数据)的波长。 我希望有一个数据框架,使我的分析更容易一点。诸如此类: 我知道,凭借我相当基本的python技能,我可能会将每个波长数据对存储为元组列表,并使一些复杂的排序魔法发生。但是自从我试图了解更多关于熊猫模块的信息以来,我一直在想我是否能更轻松地解决这个问题。然而,虽然我发

  • 我有一个dataframe,。 我想选择中不在列表中的所有索引,

  • 问题内容: 我正在寻找一种功能,可以更轻松地在两个帧之间切换。现在,每次需要在帧之间切换时,我都会通过以下代码进行操作: 我的目标是获得一个仅接受参数即可更改nav或content的函数,因为其余的基本相同。 我已经尝试过的是: 但这给我一个错误 SyntaxError:语法无效 问题答案: 编写方式是将CSS代码解析为Python代码。你不要那样 此功能适用于: 如果您只是尝试根据属性切换到框架