2017-06-18 13 views
1

複数のデータフレームから年齢列のヒストグラム分布をプロットしようとしています。 以下は私が試しているコードですが、それは空白のプロットになります。複数のデータフレームを連結してヒストグラムをプロットする

import pandas as pd 
import glob 
import matplotlib.pyplot as plt 
%matplotlib inline 

filelist = glob.glob('/Users/kadb/Desktop/participants_tsv_files/*.tsv') 
# fig = plt.figure() 
ax = fig.add_subplot(111) 
# ax.xaxis.set_ticks(df.index) 
# ax.xaxis.set_ticklabels(df['g']) 
plt.figure() 
for file in filelist: 
    df = pd.read_table(file) 
    if 'age' in df.columns: 
     df = df[~df["age"].isin(["n/a"])] # remove n/a values 
     result = result.append(df,ignore_index=True) 
     result = pd.concat([df,result], axis=1) 
     plt.hist(result, normed=1, facecolor='green') 

例のTSVファイル:

participant_id gender age physioSampling restAcquisiotion 
sub-01 M 26 50 after_cuedSGT 
sub-02 M 21 50 after_cuedSGT 
sub-03 M 22 50 after_cuedSGT 
sub-04 M 23 N/A after_cuedSGT 
sub-05 M 21 50 before_cuedSGT 
sub-06 M 19 n/a before_cuedSGT 
sub-07 F 18 50 before_cuedSGT 
sub-08 F 21 50 before_cuedSGT 
sub-09 M 20 40-60 before_cuedSGT 
sub-10 F 21 50 before_cuedSGT 
sub-11 F 20 50 before_cuedSGT 
sub-12 M 21 50 before_cuedSGT 
sub-13 F 31 50-60 before_cuedSGT 
+0

ために年齢を集めます'ステートメントは、複数の' age'カラムを作成するのではなく、1つの 'age'カラムに複数の行を追加しようとしているためです。また、私はちょうど終わりに一度プロットしたいと思いますか?もしそうなら、 'plt.hist'は' for'ループの中でインデントされるべきではありません。 –

+0

複数のヒストグラムをプロットするか、1つだけ(すべてのテーブルのすべての年齢層)プロットしますか? –

+0

ループの前に結果リストを初期化してください(つまり、 'results = []')。その後、すべての 'df'が結果リストに追加された後に' pandas.concat'を実行しますが、ループからそれを引き出します。 – CiaranWelsh

答えて

0

私はアイデアがあります:1)すべてのデータフレームからagesを収集します。 2)プロットヒストグラム

イントロ

import pandas as pd 
import glob 
import matplotlib.pyplot as plt 
%matplotlib inline 
filelist = glob.glob('/Users/kadb/Desktop/participants_tsv_files/*.tsv') 

私はあなた `pd.concatで`軸=を0 'したいと思いますHIST

ages = [] 
for file in filelist: 
    df = pd.read_table(file) 
    if 'age' in df.columns: 
     df = df[~df["age"].isin(["n/a"])] # remove n/a values 
     ages.extend(df.age.values) 

プロットHIST

fig = plt.figure(figsize = (7,7)) 
plt.grid(True) 
plt.xlabel("age") 
plt.xlabel("density") 
plt.hist(ages, normed=1, facecolor='green') 
plt.show() 
関連する問題