我构建了一个条件,可以从我的数据框中准确提取一行:
d2 = df[(df['l_ext']==l_ext) & (df['item']==item) & (df['wn']==wn) & (df['wd']==1)]
现在我想从特定列中获取一个值:
val = d2['col_name']
但结果是,我得到一个包含一行和一列(即一个单元格)的数据框。这不是我需要的。我需要一个值(一个浮点数)。我该如何在 Pandas 中做到这一点?
当您使用 从 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
将仅包含您需要的浮点数。