2016-06-22 4 views
0

私は、これらのデータフレームの3つの列に基づいて特定のしきい値に基づいてフィルタリングする必要がある同じフォーマットのファイルを2つ持っています。彼らのように別々の結果特定の列からデータフレームベースの値をフィルタリングする際に属性エラーが発生しました

例のデータフレームは、以下のようになります、

ID Mean log2FoldChange SE stat pvalue padj 
0 ENSG2 0.737466 -0.434579 0.484389 -0.897170 0.369628 0.607709 
1 ENSG32 321.467787 -0.405760 0.170955 -2.373484 0.017621 0.097636 
2 ENSG85 0.000000 NaN NaN NaN NaN NaN 

そして私は、私はフィルタリングし、データフレームからのサブセットを抽出し、

それを保存するために使用するように定義された以下の機能を実行しようとすると、
def DEfilter(df): 
    Up_regulted = df.query('log2FoldChange >= 0.58 and pvalue <= 0.05 and padj <= 0.05') 
    Down_regulated = df.query('log2FoldChange <= -0.58 and pvalue <= 0.05 and padj <= 0.05') 
    #Frames   = [Up_regulted,Down_regulated] 
    DE    = pd.concat(Up_regulted,Down_regulated) 
    return df 

と私は、データフレームの1、エラー以下の私を投げ

Patient_pairs.apply(DEfilter,axis=1) 

その上でそれを適用しようとすると、

AttributeError: ("'Series' object has no attribute 'query'", 'occurred at index 0') 

これは、これまでのところ、私はフィルタリングされた結果として保存され得ることを試みたものです新しいファイル、

 path  = '/home/pathtofile' 
     files  = os.listdir(path) 

     results  = [os.path.join(path,i) for i in files if i.startswith('DE')] 

    for filename in results: 
     name  = os.path.basename(os.path.normpath(filename)) 
     df   = pd.read_csv(filename, sep=sep, header=0) 
     Up   = df.query('log2FoldChange >= 0.58 and pvalue <= 0.05 and padj <= 0.05') 
     Down  = df.query('log2FoldChange <= -0.58 and pvalue <= 0.05 and padj <= 0.05') 
     DE   = pd.concat(Up,Down) 
     DE.to_csv('Filtered_set_' + name, sep='\t',index=False) 

すべてのヘルプ/提案は素晴らしいことだ

+0

サンプルデータの出力を期待してください。また、あなたが本当にやろうとしているように見えます: 'filteredDf = DEfilter(Patient_Pairs)'、 'df'ではなく' DE'を返すことを意味すると仮定します。 –

答えて

2

データフレームレベル操作を直列レベルメソッドで実行しようとしています。 DataFrame.apply(データフレームの行または列のいずれかに関数を適用する)に関数を渡さないでください。関数をそのまま呼び出して、データフレーム全体をパラメータとして渡します。

path = '/home/pathtofile' 
files = os.listdir(path) 
results = [os.path.join(path,i) for i in files if i.startswith('DE')] 

def DEfilter(df): 
    Up_regulted = df.query('log2FoldChange >= 0.58 and pvalue <= 0.05 and padj <= 0.05') 
    Down_regulated = df.query('log2FoldChange <= -0.58 and pvalue <= 0.05 and padj <= 0.05') 
    DE = pd.concat([Up_regulted, Down_regulated]) 
    return DE 

for filename in results: 
    df = pd.read_csv(filename, sep=sep, header=0) 
    DE = DEfilter(df) 

    name = os.path.basename(os.path.normpath(filename)) 
    DE.to_csv('Filtered_set_' + name, sep='\t',index=False) 
+0

ありがとうございました。 – user1017373

関連する問題