簡體   English   中英

pandas 數據框 - 返回 iloc 中的值,如果不存在則返回零

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM