我从服务器收到了一个制表符分隔文件,该文件以每个响应者为基础输出问题的答案。我想将数据导入到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
每个受访者的答案之间都有回车。谢谢你的帮助!
答案 0 :(得分: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加载此修订文件,为索引分配前两列。 (它们将是MultiIndex
。)然后使用unstack
将Q的索引转换为列。
(完全披露:我测试了正则表达式,但我还没有测试过。)
答案 1 :(得分: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)