[英]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.