2016-11-16 8 views
1

私は次の問題について助けをしたいと思います:パンツのデータフレームを持つナット

私は2つの心理学実験を行い、私は被験者から反応時間を取得しました。これらのデータはすべて、データフレーム内のさまざまな.xlsxファイル(実験ごとに1つのファイル)とPythonを使って提出されます。(.appendを通じて)すべてを含む単一の.xlsxファイルを作成しました 私のマスターファイルのインデックスはサブジェクトID

私が今問題にしているのは、12の科目があり、Pythonは自然の分類規則に従っていないようです...私が持っているのは、科目10,11,12が科目の前に来ることです1 - 9(これは私のデータを検索する方法を混乱させる)。 私は、このような方法でnatsortを使用しています

MASTER_DF_FLAT.index = natsorted(MASTER_DF_FLAT.index) 
MASTER_DF_FV.index = natsorted(MASTER_DF_FV.index) 

これは、インデックスの問題を修正しますが、行のデータが新しい順に従いません(エクセルであなたは、「選択範囲を拡張」することができますしそれを取り除く)。どのように私はこれを修正することができますどのような考え?

編集:ここでは、データが10+の被験者でフォーマットされた方法です:あなたが見ることができるように

subject block trial condition RT 
1 1 1 1 0,677044666 
1 1 2 12 0,556960872 
1 1 3 2 0,51685685 
1 1 4 5 0,766190078 

RTSは変更されていない。ここ

subject block trial condition RT 
10 1 1 1 0,677044666 
10 1 2 12 0,556960872 
10 1 3 2 0,51685685 
10 1 4 5 0,766190078 

と被写体1からのデータであり、 (他の値もそうではありませんでした)

ありがとうございました!

EDIT1:ここで私は自分のファイルを保存する方法である:

私はここに私のコードは正確である:)ことを実行します。

for f in files: 
    data = os.path.join(data_dir,f) 
    df = pd.read_excel(data) 

    df.set_index('subject', inplace = True) 


concatenated = pd.concat([block, trial, condition, RT, SOA, acc, ISI], axis=1) 

    if 'FV' not in f: 
     flatDFs.append(concatenated) 
    else: 
     fvDFs.append(concatenated) 


MASTER_DF_FLAT = pd.concat(flatDFs) 
writerFlat = pd.ExcelWriter('MASTER_FILE_FLAT.xlsx') 
MASTER_DF_FLAT.to_excel(writerFlat,'Sheet1') 
writerFlat.save() 

あなたが見ることができるように、私の.xlsxファイルのインデックスが実際にあります主題すべてうまく動作し、要素の順序です!

+0

サンプルデータを表示してください。あなたのデータが数値ではなく文字列として読み込まれているようです。ちなみに、Excelではなく、CSVのようなプレーンテキスト形式を使うほうが良いでしょう。 – BrenBarn

+0

完了。あなたはもっと情報が必要な場合私に教えてください:) –

+0

インデックスが整数である限り、パンダは正しくソートする必要があります。 ['sort_index'](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.sort_index.html)を試しましたか? – Kartik

答えて

0

'subject'はあなたのインデックスではありません。これで問題は解決します:

df.set_index('subject', inplace=True) 
df.sort_index(inplace=True) 
+0

'subject'はすでに私のインデックスです。 ' ' writerFlat = pdというコードでマスターファイルを作成するときに、データフレームを新しいxlsxファイルに保存します。ExcelWriter( 'MASTER_FILE_FLAT.xlsx') ' writerFlat.save()' Excelでは、データフレームインデックスは単に最初の列です。 –

+0

あなたのExcelファイルを保存する前に私の答えを実行してください。ワークフローでは、個々の件名ファイルを読み込み、単一のデータフレームにマージし、件名をインデックスとして設定し、インデックスをソートしてから、マスターのExcelファイルに保存します。 – Kartik

関連する問題