pandas 查詢函數query的用法說明

query() 函數簡介

pandas的query()方法是基於DataFrame列的計算代數式,對於按照某列的規則進行過濾的操作,可以使用query方法。

代碼示例

import pandas as pd
df = pd.DataFrame({'a':[1, 2, 3, 4, 5, 6],
     'b':[1, 2, 3, 4, 5, 6],
     'c':[1, 2, 3, 4, 5, 6]})
query_list = [1, 2]
df_2 = df.query('c not in @query_list')[['a', 'b']]

使用總結

對於sql中的in或者not in,可以使用query()函數按照某列條件進行過濾,且query()函數返回一個DataFrame,可以直接在後面根據索引獲取最終想要的數據。

補充:python query方法_Pandas dataframe.query方法語法

問題:

我想更好地理解PandasDataFrame.query方法以及下面的表達式表示什麼:

match = dfDays.query('index > @x.name & price >= @x.target')

@x.name代表什麼?

我理解這段代碼(一個包含pandas.tslib.Timestamp數據的新列)的結果輸出是什麼,但不清楚用於獲取此最終結果的表達式。

數據:

從這裡開始:np.random.seed(seed=1)
rng = pd.date_range('1/1/2000', '2000-07-31',freq='D')
weeks = np.random.uniform(low=1.03, high=3, size=(len(rng),))
ts2 = pd.Series(weeks
,index=rng)
dfDays = pd.DataFrame({'price':ts2})
dfWeeks = dfDays.resample('1W-Mon').first()
dfWeeks['target'] = (dfWeeks['price'] + .5).round(2)
def find_match(x):
match = dfDays.query('index > @x.name & price >= @x.target')
if not match.empty:
return match.index[0]
dfWeeks.assign(target_hit=dfWeeks.apply(find_match, 1))

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。如有錯誤或未考慮完全的地方,望不吝賜教。

推薦閱讀: