[英]pandas dataframe - return the value in iloc, or return zero if it does not exist
在对 Pandas 数据帧使用 iloc 方法时,如果值不存在,我想返回零:(我有一个查询,它总是返回一行或一个空数据帧。我想要第一个左值存在时)
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
方法的东西!
你可以更 pythonic 替换你的 try/except 块:
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])
没有比try
/ except
更好的方法了。 iloc
的基本iloc
是按整数位置位置进行索引。
行为和功能与 NumPy np.ndarray
、Python list
和其他可索引对象一致。 没有直接的方法可以索引列表的第一个值,或者如果列表为空则返回0
。
稍微好一点的方法是显式并仅捕获IndexError
并使用iat
通过整数位置访问标量。 此外,您可以同时按行和列索引:
try:
print(query.iat[0, 0])
except IndexError:
print(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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.