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