我构建了一个条件,可以从我的数据框中准确提取一行:
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属性。操作方法如下:
df['col_name']
.iloc
.values
如果您知道 DataFrame 中只有一行d2,则可以使用它.iloc来获取值:
d2
val = d2['col_name'].iloc[0]
或者,您可以将列转换为 numpy 数组并获取第一个元素:
val = d2['col_name'].values[0]
.squeeze()
如果要将一行一列的 DataFrame 直接转换为标量,可以使用.squeeze():
val = d2['col_name'].squeeze()
假设你的 DataFramedf如下所示:
df
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将仅包含您需要的浮点数。
.iloc[0]
val