Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从数据帧而不是序列中提取值(不引用索引)?_Python_Pandas_Dataframe - Fatal编程技术网

Python 如何从数据帧而不是序列中提取值(不引用索引)?

Python 如何从数据帧而不是序列中提取值(不引用索引)?,python,pandas,dataframe,Python,Pandas,Dataframe,我试图通过条件选择从Pandas数据帧返回一个特定项(并且不希望必须引用索引才能这样做) 以下是一个例子: 我有以下数据帧: Code Colour Fruit 0 1 red apple 1 2 orange orange 2 3 yellow banana 3 4 green pear 4 5 blue blueberry 我输入以下代码来搜索蓝莓的代码: df[df['Fruit'] == 'blueberry']['

我试图通过条件选择从Pandas数据帧返回一个特定项(并且不希望必须引用索引才能这样做)

以下是一个例子:

我有以下数据帧:

  Code  Colour  Fruit
0   1   red     apple
1   2   orange  orange
2   3   yellow  banana
3   4   green   pear
4   5   blue    blueberry
我输入以下代码来搜索蓝莓的代码:

df[df['Fruit'] == 'blueberry']['Code']
这将返回:

4    5
Name: Code, dtype: int64
属于以下类型:

pandas.core.series.Series
但我实际上想返回的是类型的数字5:

numpy.int64
如果输入以下代码,我可以执行此操作:

df[df['Fruit'] == 'blueberry']['Code'][4]
i、 e.引用索引给出数字5,但我不想引用索引

我可以在这里部署另一种语法来实现同样的功能吗

谢谢你

更新:

另一个想法是该代码:

df[df['Fruit'] == 'blueberry']['Code'][df[df['Fruit']=='blueberry'].index[0]]
然而,这似乎不是特别优雅(它引用了索引)。是否有一种更简洁、更精确的方法不需要引用索引,或者这是严格必要的

谢谢

让我们试试这个:

df.loc[df['Fruit'] == 'blueberry','Code'].values[0]
输出:

5

首先,使用
.loc
访问数据帧中的值,使用布尔索引进行行选择,使用索引标签进行列选择。将序列返回到值数组的转换,由于该数组中只有一个值,因此可以使用索引“[0]”从该单元素数组中获取标量值。

引用索引是一项要求(除非使用
next()
^),因为
pd.series
不能保证有一个值

您可以使用
pd.Series.values
将值提取为数组。如果您有多个匹配项,这也适用:

res = df.loc[df['Fruit'] == 'blueberry', 'Code'].values

# array([5], dtype=int64)

df2 = pd.concat([df]*5)
res = df2.loc[df2['Fruit'] == 'blueberry', 'Code'].values

# array([5, 5, 5, 5, 5], dtype=int64)
要从numpy数组中获取列表,可以使用
.tolist()

数组和列表版本都可以直观地编制索引,例如第一项的
res[0]

^如果您确实反对使用索引,可以使用
next()
进行迭代:

next(iter(res))

您还可以将“水果”列设置为ann索引

df_fruit_index = df.set_index('Fruit')
并根据您选择的水果从“代码”列中提取值

df_fruit_index.loc['blueberry','Code']

似乎在某一点上引用某种形式的索引是必须的,但返回的是实际值,而不是数组或序列。不,如果使用
next(iter(res))
。虽然索引可以在后台使用,但它在没有显式指定索引的情况下迭代。感谢您的澄清。问题具体说明(不引用索引)?,因此这不会回答所问的问题,因为此解决方案将列设置为索引,然后引用索引。
df_fruit_index.loc['blueberry','Code']