Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python dataframe-返回iloc中的值,如果不存在,则返回零_Python_Pandas_Indexing - Fatal编程技术网

Python dataframe-返回iloc中的值,如果不存在,则返回零

Python dataframe-返回iloc中的值,如果不存在,则返回零,python,pandas,indexing,Python,Pandas,Indexing,在对Pandas dataframe使用iloc方法时,如果该值不存在,我希望返回零:(我有一个查询,它将始终返回一行或一个空的dataframe。当它存在时,我希望返回左一个值) 有没有更好的iloc方法或内置方法?我正在考虑类似Python字典的get方法 除了,没有比尝试/更好的方法了。iloc的基本原理是按整数位置索引 行为和功能与NumPynp.ndarray、Pythonlist和其他可索引对象一致。如果列表为空,则无法直接索引列表的第一个值或返回0 一个稍微好一点的方法是显式地只捕

在对Pandas dataframe使用iloc方法时,如果该值不存在,我希望返回零:(我有一个查询,它将始终返回一行或一个空的dataframe。当它存在时,我希望返回左一个值)

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

除了,没有比尝试/
更好的方法了。
iloc
的基本原理是按整数位置索引

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

一个稍微好一点的方法是显式地只捕获
索引器
,并使用
iat
按整数位置访问标量。此外,您还可以同时按行和列进行索引:


您可以更具python风格,将try/except块替换为:

打印(如果len(query)==0 else query.iloc[0][0])

说明:应用于数据帧的len()返回行数

更新:正如注释中所建议的,
query.empty
这更为惯用,
.iat
更适合于标量查找,因此:


打印(0 if query.empty else query.iat[0,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
在price>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

将.fillna(0)链接到查询或数据帧的末尾,这将为您处理nas。为什么不使用
fillna
将缺少的值替换为0?
fillna(0)
将永远无法工作,这是关于
query
为空数据帧时发生的情况。用
0
在空数据帧中填充null不会有任何影响。很好!这就是我想要的!一个简单的
len
会有帮助!结合我建议的两个答案!:
print(query.iat[0,0]如果len(query)!=0否则0
)更惯用的方法是使用
if not query.empty
而不是
if len(query)==0
In [3]: 
mask = (df['price']>1500)
next(iter(df.loc[mask]['col1']), 0)
Out[3]: 
2
In [4]: 
mask = (df['price']>500)
next(iter(df.loc[mask]['col1']), 0)
Out[4]: 
1