从单行 pandas DataFrame 中提取值

问题描述 投票:0回答:5

我有一个关系数据库格式的数据集(通过各种 .csv 文件的 ID 链接)。

我知道每个数据框仅包含一个 ID 值,我想知道从该行提取值的最简单方法。

我现在在做什么:

# the group has only one element
purchase_group = purchase_groups.get_group(user_id)
price = list(purchase_group['Column_name'])[0]

第三行让我很困扰,因为它看起来很难看,但我不确定解决方法是什么。分组(我猜)假设可能有多个值并返回一个

<class 'pandas.core.frame.DataFrame'>
对象,而我只想返回一行。

python pandas
5个回答
80
投票

如果您只想要值而不是 df/series,则调用

values
并索引第一个元素
[0]
所以就:

price = purchase_group['Column_name'].values[0]

会起作用的。


11
投票

这里的聚会迟到了,但是

purchase_group['Column Name'].item()
现在可用,并且比其他一些解决方案更干净


9
投票

如果

purchase_group
有单行,那么执行
purchase_group = purchase_group.squeeze()
会将其变成一系列,因此您可以简单地调用
purchase_group['Column_name']
来获取您的值


0
投票

这个方法直观;例如,从数据框中获取第一行值(列表列表中的列表):

np.array(df)[0]

0
投票

随着时间的推移,我已经多次阅读这篇文章。这是我以不一致的方式在不同存储库中编写的典型内容。所以我做了一些基准测试来确定哪种方法更快。

对于测试,我使用了一个数据框,其中有单列和单行。

df['_col0'].values[0] -> 3.34 µs ± 4.65 ns
df['_col0'].item() -> 4.7 µs ± 10.6 ns
df.values[0][0] -> 6.36 µs ± 611 ns
np.array(df)[0][0] -> 10.4 µs ± 1.19 µs
np.array(df['_col0'])[0] -> 11.2 µs ± 162 ns
df.squeeze() -> 18.3 µs ± 177 ns
df.iloc[0, 0] -> 18.8 µs ± 5.66 µs
© www.soinside.com 2019 - 2024. All rights reserved.