如何从Pandas DataFrame中提取指定条件的单个数值?
提取Pandas DataFrame中指定条件的单个数值
问题场景
现有名为attack_probability_df的DataFrame:
city date attack probability 0 Rome 1996-02-23 0.163317 1 Rome 1996-02-24 0.219221 2 Rome 1996-02-25 0.180625 3 Rome 1996-02-26 0.149749 4 Rome 1996-02-27 0.121288
使用以下代码按日期和城市提取attack probability值时,返回带索引的Series而非单个数值:
attack_probability_df.loc[attack_probability_df.date == date].loc[attack_probability_df.city == city]["attack probability"]
返回结果示例:
2345 0.18593 Name: attack probability, dtype: float64
解决方法
方法1:用.item()提取标量(推荐)
这是最安全的方式,仅当结果为单个元素时返回数值,若结果数量不符会直接报错,避免意外:
# 合并查询条件,避免链式索引的潜在问题 result = attack_probability_df.loc[ (attack_probability_df.date == date) & (attack_probability_df.city == city), "attack probability" ].item()
方法2:用.iloc[0]按位置取值
适用于确定结果仅含单个元素的场景,通过位置索引直接取第一个元素:
result = attack_probability_df.loc[ (attack_probability_df.date == date) & (attack_probability_df.city == city), "attack probability" ].iloc[0]
方法3:用.values[0]取数值数组的首个元素
通过获取Series的底层数值数组,提取第一个元素:
result = attack_probability_df.loc[ (attack_probability_df.date == date) & (attack_probability_df.city == city), "attack probability" ].values[0]
额外优化:合并查询条件
原代码使用两次.loc链式索引,可能触发SettingWithCopyWarning,建议将两个条件合并为一个布尔表达式(注意加括号),既提升效率又更安全。
内容的提问来源于stack exchange,提问作者eresque-
相关产品推荐
相关产品推荐

