熊猫数据框-返回iloc中的值,如果不存在则返回零

时间:2019-01-23 19:53:01

标签: python pandas indexing

在使用iloc方法处理Pandas数据框时,如果值不存在,我想返回零:(我有一个查询,它总是返回一行或一个空的数据框。当我想返回第一个左值时存在)

import pandas as pd

mydict = {"col1":[1,2], "price":[1000,2000]}
df = pd.DataFrame(mydict)
query=df[df['price']>3000]

try:
    print(query.iloc[0][0])
except BaseException:
    print(0)

#print result: 0

iloc是否有更好的方法或内置方法?我正在考虑类似于Python字典的get方法!

3 个答案:

答案 0 :(得分:0)

从本质上讲,没有什么比try / except更好的了。 iloc的基本原理是按整数位置索引。

该行为和功能与NumPy np.ndarray,Python list和其他可索引对象一致。没有直接方法对列表的第一个值编制索引 或如果列表为空,则返回0

一种更好的方法是显式并仅捕获IndexError并使用iat通过整数位置访问标量。此外,您可以按行和列同时编入索引

try:
    print(query.iat[0, 0])
except IndexError:
    print(0)

答案 1 :(得分:0)

您可以使用以下命令将try / except块替换为pythonic

print(0 if len(query)==0 else query.iloc[0][0])

说明:应用于熊猫数据框的len()返回行数。

更新:如评论中所建议,query.empty更为惯用,而.iat更适合标量查找,因此:

print(0 if query.empty else query.iat[0,0])

答案 2 :(得分:0)

你可能可以使用类似的东西

next(iter(series, default))

例如,使用您的输入

In [1]: 
import pandas as pd
mydict = {"col1":[1,2], "price":[1000,2000]}
df = pd.DataFrame(mydict)
df
Out[1]: 
   col1  price
0     1   1000
1     2   2000

并过滤价格 > 2000,给出默认值(我们将其设置为零),因为 df.loc[mask] 将为空

In [2]: 
mask = (df['price']>2000)
next(iter(df.loc[mask]['col1']), 0)
Out[2]: 
0

其他情况按预期工作。例如,过滤价格 > 1500,给出 2

In [3]: 
mask = (df['price']>1500)
next(iter(df.loc[mask]['col1']), 0)
Out[3]: 
2

对价格进行过滤 > 500 给出 1

In [4]: 
mask = (df['price']>500)
next(iter(df.loc[mask]['col1']), 0)
Out[4]: 
1