![](/img/trans.png)
[英]How can i auto adjust a text file into a csv file with proper indexing using pandas?
[英]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')
分為三個部分:
讀入文件:
org_df = pd.read_csv(filepath, delim_whitespace=True, names=['startTime', 'responseTime', 'correct'])
我們告訴pandas文件在哪里,我們要基於空格分隔列,並且我們startTime, responseTime
名列startTime, responseTime
和correct
將一個整數減去startTime
列:
'org_df ['startTime'] = org_df ['startTime']。add(subtract)'
我們告訴熊貓我們希望新的startTime
列等於舊列減去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)
在這里,我們告訴熊貓根據“正確”列中的值將數據分為幾組。 然后我們檢查每個組,確定是“正確”組還是“不正確”組。 然后將結果輸出為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.