2017-09-08 14 views
0

neat forest plotsを自分自身のデータに再現しようとしています。しかし、私はこの機能に悩まされていて、私の人生では何をすべきかを理解できません。パンダ:検索機能を適用する

def create_smry(trc, data, pname='subject'): 
    ''' Conv fn: create trace summary for sorted forestplot ''' 

    dfsm = pm.df_summary(trc).reset_index() 
    dfsm.rename(columns={'index':'featval'}, inplace=True) 

    print(dfsm.head(n=5)) 

    dfsm = dfsm.loc[dfsm['featval'].apply(
     lambda x: re.search('{}__[0-9]+'.format(pname), x) is not None)] 

    dfsm.set_index(dfs[pname].unique(), inplace=True) 
    dfsm.sort('mean', ascending=True, inplace=True) 
    dfsm['ypos'] = np.arange(len(dfsm)) 

    return dfsm 

印刷戻っ:

featval  mean  sd mc_error hpd_2.5 hpd_97.5 
0 mu_a -0.008913 0.011715 0.000613 -0.029139 0.014329 
1 mu_b 0.003252 0.000271 0.000015 0.002698 0.003765 
2 a__0 -0.065255 0.024315 0.001168 -0.113708 -0.018885 
3 a__1 -0.081748 0.023247 0.001114 -0.124560 -0.036777 
4 a__2 0.025326 0.021661 0.001024 -0.019744 0.065263 

エラー:

--------------------------------------------------------------------------- 
NameError         Traceback (most recent call last) 
<ipython-input-125-2465af1d68b8> in <module>() 
----> 1 dfsm_unpl_mfr = create_smry(hierarchical_trace[-333:], data, 'subject') 
     2 custom_forestplot(dfsm_unpl_mfr) 

<ipython-input-123-5f6828d6cf8e> in create_smry(trc, data, pname) 
     8 
     9  dfsm = dfsm.loc[dfsm['featval'].apply(
---> 10   lambda x: re.search('{}__[0-9]+'.format(pname), x) is not None)] 
    11 
    12  dfsm.set_index(dfs[pname].unique(), inplace=True) 

~/anaconda/envs/py35/lib/python3.5/site-packages/pandas/core/series.py in apply(self, func, convert_dtype, args, **kwds) 
    2353    else: 
    2354     values = self.asobject 
-> 2355     mapped = lib.map_infer(values, f, convert=convert_dtype) 
    2356 
    2357   if len(mapped) and isinstance(mapped[0], Series): 

pandas/_libs/src/inference.pyx in pandas._libs.lib.map_infer (pandas/_libs/lib.c:66645)() 

<ipython-input-123-5f6828d6cf8e> in <lambda>(x) 
     8 
     9  dfsm = dfsm.loc[dfsm['featval'].apply(
---> 10   lambda x: re.search('{}__[0-9]+'.format(pname), x) is not None)] 
    11 
    12  dfsm.set_index(dfs[pname].unique(), inplace=True) 

NameError: name 're' is not defined 
  1. I

    は、私は自分のデータに次のコードを動作させるためにしようとしていますre.searchが何であるか把握できないdfではありません。
  2. {}__[0-9]+はこの意味で何を意味しますか?

入力が非常に複雑なので、私は最小の実例を提供することはできません。正規表現のインポート後

私はre.searchと単純にプロットを遮断した場合

featval  mean  sd mc_error hpd_2.5 hpd_97.5 
0 b0_mu -0.022521 0.010266 0.000597 -0.042222 -0.003072 
1 b1_mu 0.003220 0.000256 0.000014 0.002742 0.003700 
2 b2_mu 0.024366 0.005288 0.000292 0.014786 0.035139 
3 b3_mu 0.008563 0.004393 0.000243 0.000634 0.017385 
4 b0__0 -0.078060 0.025093 0.001208 -0.121480 -0.024921 
5 b0__1 -0.097636 0.024500 0.001413 -0.144801 -0.052600 
6 b0__2 0.009216 0.024381 0.001229 -0.038927 0.052254 
7 b0__3 0.024541 0.025525 0.001399 -0.025824 0.070295 
8 b0__4 -0.069331 0.020887 0.001057 -0.106392 -0.024169 
9 b0__5 -0.065629 0.024787 0.001178 -0.111582 -0.019849 
Empty DataFrame 
Columns: [featval, mean, sd, mc_error, hpd_2.5, hpd_97.5] 
Index: [] 

を返し

import re 

def create_smry(trc, data, pname='subject'): 
    ''' Conv fn: create trace summary for sorted forestplot ''' 

    dfsm = pm.df_summary(trc).reset_index() 
    dfsm.rename(columns={'index':'featval'}, inplace=True) 

    print(dfsm.head(n=10)) 

    dfsm = dfsm.loc[dfsm['featval'].apply(
     lambda x: re.search('{}__[0-90]+'.format(pname), x) is not None)] 

    print(dfsm.head(n=10)) 

    dfsm.set_index(data[pname].unique(), inplace=True) 
    dfsm.sort_values('mean', ascending=True, inplace=True) 
    dfsm['ypos'] = np.arange(len(dfsm)) 

    print(dfsm.head(n=15)) 

    return dfsm 

(また、私は、インデックスを変更しようといけませんプロットを得る:

enter image description here

しかし、re.searchは正しく使用されていないため、trcfraのy値はすべてプロットされています。

EDIT:私は正規表現を見つけ出すことができなかったので、

dfsm['featidx'] = dfsm['featval'].apply(lambda x: any(pd.Series(x).str.contains(feat))) 

を使用して終了しました。

+1

あなたは '輸入re'呼んでいましたか?正規表現ライブラリ。 – Dark

答えて

2

I cant figure out what re.search is, since re is not a df.

re文字列に正規表現のアクションを実行するための正規表現ライブラリです。それを使用するには、ヘッダまたはpythonファイルでimport reに電話する必要があります。

What does {}__[0-9]+ mean in this context?

なお、この正規表現({}__[0-9]+)が一致を生成し、対応するマッチオブジェクトを返す場所を探して文字列をスキャン、re.searchは言い、正規表現パターンです。ライブラリに関する詳細情報については

: 'Regex Documentation'

+0

こんにちは。答えをありがとう!正規表現を 'dfsm = dfsm.loc [dfsm ['featval']に変更しましたapply(lambda x:re.search( '{} __ [0-90] +'。format(pname)、x)はNoneではない)] '。ただし、これは空のデータフレームを返します。私はそれに応じて質問を編集しました。 – TMorville

+0

@TMorvilleのお手伝いをしています。 – Dark