如何在文本文件中调整数据

时间:2016-10-31 18:10:39

标签: python

我尝试使用Python来帮助我整理数据。具体来说,我试图找出如何调整开始时间,并使用Python分离正确和错误的响应。

例如,我对每个主题的实验结果都存储在一个文本文件(sub001.txt)中。here is one subject file

第1列对应于开始时间(以秒为单位) 第二列对应于响应时间(in MS)。
第3列对应于响应是否 正确(0:不正确,1:正确)。

我正在尝试编写一个程序来读取此文件,然后执行以下操作:

a。从所有起效时间减去10秒 b。分隔与正确和错误响应相关联的文件,以便我可以单独运行这些文件的统计信息。

所以我将为一个主题提供2个文件(sub001_correct.txt和sub001_incorrect.txt)。每个文件应包含两列。第一列应包含更正的起始值 时间(来自上面)。第二列应包含 响应时间。

我试着查看其他问题和答案但是没有多少运气。

2 个答案:

答案 0 :(得分:1)

Jissel,

我更喜欢使用名为pandas的库来执行此类操作。这是一个可以用你想做的事情的脚本。

import pandas as pd
import os

def parse_file(filepath):
    org_df = pd.read_csv(filepath, delim_whitespace=True, names=['startTime', 'responseTime', 'correct'])
    org_df['startTime'] = org_df['startTime'].subtract(10)
    groups = org_df.group_by('correct')
    for g in groups:
        id = g[0]
        df = g[1]
        if id == 0:
            type = 'incorrect'
        else:
            type = 'correct'
        df[['startTime', 'responseTime']].to_csv(
            os.path.splitext(filepath)[0] + '_' + type + os.path.splitext(filepath)[1], index=False)


if __name__ == '__main__':
    parse_file('F:/sub001.txt')

分为三部分:

  1. 读入文件:

    org_df = pd.read_csv(filepath, delim_whitespace=True, names=['startTime', 'responseTime', 'correct'])

  2. 我们告诉pandas文件的位置,我们要根据空格分隔列,并且我们要将列命名为startTime, responseTimecorrect

    1. 将整数减去startTime列:

      'org_df ['startTime'] = org_df ['startTime']。add(subtract)'

    2. 我们告诉大熊猫我们希望我们的新startTime列等于旧列减去10

      1. 分开答案是否正确:

        groups = org_df.group_by('correct') for g in groups: id = g[0] df = g[1] if id == 0: type = 'incorrect' else: type = 'correct' df[['startTime', 'responseTime']].to_csv( os.path.splitext(filepath)[0] + '_' + type + os.path.splitext(filepath)[1], index=False)

      2. 在这里,我们告诉pandas根据“正确”列中的值将数据分成组。然后我们检查每个组,确定它是“正确”还是“不正确”组。然后将结果输出为CSV。

答案 1 :(得分:0)

以下代码可以满足您的需求:

f = open('sub001.txt', 'r')
f_correct = open('correct001.txt', 'w')
f_incorrect = open('incorrect001.txt', 'w')


for line in f:
    parts = line.strip().split(' ')
    onset = int(parts[0])
    response = parts[2]
    correctness = parts[4]

    corrected_onset = onset - 10
    if correctness == '1':
        new_entry = str(corrected_onset) + ' ' + response + '\n'
        f_correct.write(new_entry)
    else:
        new_entry = str(corrected_onset) + ' ' + response + '\n'
        f_incorrect.write(new_entry)

f.close()
f_correct.close()
f_incorrect.close()