0

回答者ごとに質問への回答を出力するサーバーから、タブ区切りのファイルを受け取りました。列が各質問で、行が各回答者の回答である pandas データフレームにデータをインポートしたいと思います。ある回答者の場合は次のようになります。

[2072]  Anonymous
Q-0 [01] Sat 25 May 2013  7:43 PM UTC +0000 0.14    Student (Graduate/ Undergraduate)
Q-1 [01] Sat 25 May 2013  7:43 PM UTC +0000 0.00    
Q-1 [01] Sat 25 May 2013  7:43 PM UTC +0000 0.00    1|1|1|1|4|
Q-2 [01] Sat 25 May 2013  7:43 PM UTC +0000 1.00    1-3
Q-3 [01] Sat 25 May 2013  7:43 PM UTC +0000 0.50    Male
Q-4 [01] Sat 25 May 2013  7:43 PM UTC +0000 0.33    18-24
Q-5 [01] Sat 25 May 2013  7:43 PM UTC +0000 1.00    
Q-6 [01] Sat 25 May 2013  7:43 PM UTC +0000 0.00    Prefer not to answer
Q-7 [01] Sat 25 May 2013  7:43 PM UTC +0000 0.50    Yes
Q-8 [01] Sat 25 May 2013  7:43 PM UTC +0000 0.13    Bachelor's Degree
Q-9 [01] Sat 25 May 2013  7:43 PM UTC +0000 0.00    Other
Q-10    [01] Sat 25 May 2013  7:43 PM UTC +0000 0.00    Mathematics
Q-11    [01] Sat 25 May 2013  7:43 PM UTC +0000 0.33    High school
Q-11    [01] Sat 25 May 2013  7:43 PM UTC +0000 0.33    College (introductory courses)
Q-12    [01] Sat 25 May 2013  7:43 PM UTC +0000 1.00    Professional
Q-13    [01] Sat 25 May 2013  7:43 PM UTC +0000 0.50    Mac OS X
Q-14    [01] Sat 25 May 2013  7:43 PM UTC +0000 0.25    Every week
Q-15    [01] Sat 25 May 2013  7:43 PM UTC +0000 0.00    A test that proves or disproves of some abstract theory about the world
Q-16    [01] Sat 25 May 2013  7:43 PM UTC +0000 0.00    
Q-17    [01] Sat 25 May 2013  7:43 PM UTC +0000 2.00    Yes
Q-18    [01] Sat 25 May 2013  7:43 PM UTC +0000 0.00    
Q-19    [01] Sat 25 May 2013  7:43 PM UTC +0000 0.20    Timely feedback from the instructor
Q-20    [01] Sat 25 May 2013  7:43 PM UTC +0000 0.00    

各回答者の回答の間にキャリッジ リターンがあります。助けてくれてありがとう!

4

2 に答える 2

1

重要なステップは、各回答者のブロックを明確にすることです。各行の先頭に回答者の ID を付けるようにファイルを書き直すのはどうですか? 例えば「匿名」の場合は「2072」と表示されます。

import re

f = open('new_file', 'w')
for line in open('filename'):
    # line might be like [####] Student_Name or Q-...
    m = re.match('\[(\d+)\] .*', line)
    if m:
        # Line is like [####] Student_name.
        respondent_id = m.group(1)
        continue
    # Line is like Q-...
    # Write new line like #### Q-...
    f.write(str(respondent_id) + line)

次に、pandas read_csv を使用してこの改訂されたファイルを読み込み、最初の 2 つの列をインデックスに割り当てます。(それらは になりますMultiIndex。) 次に、 を使用unstackして Q のインデックスを列にピボットします。

(完全な開示: 正規表現をテストしましたが、すべてをテストしたわけではありません。)

于 2013-05-30T15:28:01.830 に答える
0

これが私のために働いたものです:

import re

f = open('new_file', 'w')
for line in open('filename'):
    m = re.match('\[\d+\]*', line)
    if m:
        respondent_id = m.group()
        continue
    f.write(str(respondent_id) + line)
于 2013-05-30T16:21:40.933 に答える