簡體   English   中英

如何調整文本文件中的數據

[英]How can I adjust my data in a text file

我正在嘗試使用Python幫助我整理數據。 具體來說,我試圖弄清楚如何調整開始時間,並使用Python區分正確和錯誤的響應。

例如,我針對每個主題的實驗結果都存儲在文本文件(sub001.txt)中。 這是一個主題文件

第一列對應於開始時間(以秒為單位)。
第二列對應於響應時間(以毫秒為單位)。
第三列對應於響應是否正確(0:錯誤,1:正確)。

我正在嘗試編寫一個程序來讀取此文件,然后執行以下操作:

一種。 從所有發病時間中減去10s。
b。 分離與正確和不正確的響應相關聯的文件,以便我可以分別對它們進行統計。

因此,我將為一個主題准備2個文件(sub001_correct.txt和sub001_incorrect.txt)。 每個文件應包含兩列。 第一列應包含更正的開始時間(從上面的a。開始)。 第二列應包含響應時間。

我嘗試查看其他問題和答案,但運氣還不太好。

吉塞爾

我更喜歡使用一個名為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'])

我們告訴pandas文件在哪里,我們要基於空格分隔列,並且我們startTime, responseTime名列startTime, responseTimecorrect

  1. 將一個整數減去startTime列:

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

我們告訴熊貓我們希望新的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)

在這里,我們告訴熊貓根據“正確”列中的值將數據分為幾組。 然后我們檢查每個組,確定是“正確”組還是“不正確”組。 然后將結果輸出為CSV。

以下代碼可以滿足您的要求:

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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM