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。如有錯誤或未考慮完全的地方,望不吝賜教。
推薦閱讀:
- Python量化交易實戰之使用Resample函數轉換“日K”數據
- pandas map(),apply(),applymap()區別解析
- Pandas使用query()優雅的查詢實例
- python中pandas操作apply返回多列的實現
- 利用Pandas索引和選取數據方法詳解