小能豆

如何从数据框的单元格中获取值?

python

我构建了一个条件,可以从我的数据框中准确提取一行:

d2 = df[(df['l_ext']==l_ext) & (df['item']==item) & (df['wn']==wn) & (df['wd']==1)]

现在我想从特定列中获取一个值:

val = d2['col_name']

但结果是,我得到一个包含一行和一列(即一个单元格)的数据框。这不是我需要的。我需要一个值(一个浮点数)。我该如何在 Pandas 中做到这一点?


阅读 33

收藏
2024-09-13

共1个答案

小能豆

当您使用 从 DataFrame 中提取单个单元格时df['col_name'],即使只有一个值,也会得到一个 Series。要从此 Series 获取实际标量值,您可以使用.iloc访问器或.values属性。操作方法如下:

使用.iloc

如果您知道 DataFrame 中只有一行d2,则可以使用它.iloc来获取值:

val = d2['col_name'].iloc[0]

使用.values

或者,您可以将列转换为 numpy 数组并获取第一个元素:

val = d2['col_name'].values[0]

使用.squeeze()

如果要将一行一列的 DataFrame 直接转换为标量,可以使用.squeeze()

val = d2['col_name'].squeeze()

示例代码

假设你的 DataFramedf如下所示:

import pandas as pd

# Sample DataFrame
data = {
    'l_ext': [1, 2, 3],
    'item': [10, 20, 30],
    'wn': [100, 200, 300],
    'wd': [1, 1, 1],
    'col_name': [0.5, 1.5, 2.5]
}

df = pd.DataFrame(data)

# Condition
l_ext = 2
item = 20
wn = 200

# Extract single row DataFrame
d2 = df[(df['l_ext'] == l_ext) & (df['item'] == item) & (df['wn'] == wn) & (df['wd'] == 1)]

# Extract the value from 'col_name'
val = d2['col_name'].iloc[0]

print(val)  # Output: 1.5

在此示例中,d2是仅包含一行和一列的 DataFrame。该.iloc[0]方法从该 DataFrame 中提取标量值。这样,val将仅包含您需要的浮点数。

2024-09-13