Python 如何从数据帧而不是序列中提取值(不引用索引)?
我试图通过条件选择从Pandas数据帧返回一个特定项(并且不希望必须引用索引才能这样做) 以下是一个例子: 我有以下数据帧: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']['
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']