pandas to_csv 创建空的、未指定的文件

pandas to_csv creates empty, unspecified file

我对 python 和一般编程都不熟悉,所以这可能是一个愚蠢的问题。

我目前正在准备一个心理学实验,使用独立的 PsychoPy v1.90.2,python 2.7,编码器版本,基于现有脚本和同事的教程。它在我的计算机 (Mac) 和 Windows 10 计算机上运行良好,但在使用 Windows7 的计算机上,它不会将输出(即参与者的响应)保存到.csv 文件。创建了一个空文件,没有任何文件规范,但文件名正确且位置正确。

</p>

from psychopy import visual, core, event, gui, info, data
import pandas as pd
import numpy as np
import os 
import random 
import sys
import time
GUI = gui.Dlg(title = "example")
GUI.addField('participant:')
GUI.show()
if GUI.OK:
    metadata = GUI.data
else:
    sys.exit('participant cancelled')
w = visual.Window([1000, 600], color='black', units='pix')
df = pd.DataFrame([[1, 2], [5, 3], [4, 6]], columns=['stim_a', 'stim_b'])
df['participant'] = int(metadata[0])
df['ans'] = ''
df = df.iloc[random.sample(df.index, len(df))]
df.index = range(len(df))
output_df = "S_" + str(df.participant) + "_df" + "_" + time.strftime("%Y-%m:%d_%Hh%M") + ".csv"
for j in range(df.shape[0]):
    event.clearEvents()
    stim_a = visual.TextStim(w, df.stim_a[j])
    stim_a.draw()
    w.flip()
    resp = event.waitKeys()
    df.ans[j] = resp
    print df
df.to_csv(output_df, index = False, header = True, sep = ',', encoding = 'utf-8')

最后应该是什么:一个csv文件,包含最初包含在df中的所有信息,加上包含参与者编号的"participant"列和包含执行的按键操作的"ans"列由参与者。

我尝试了什么:

我知道有一种比 "pure" pandas 更好的方法来保存数据,那就是使用 experimentHandler,但是因为它以前有效,到目前为止我的知识仅限于我同事的工作方式对于精神病患者,我保留了这种方法。我还有其他兼容性问题,我设法解决了,考虑到我目前所处的时间压力,恐怕这是一种沉没成本情况...

编辑:工作示例现在应该可以工作了,很抱歉!

csv 数据在脚本终止时写入(“刷新”)。问题很可能是由于 Windows 中的 OS 特定原因而挂起 7。我以前见过这个问题,并以两种不同的方式解决了它:

在脚本终止前关闭 psychopy

将此添加到脚本末尾:

w.close()
core.quit()

在脚本终止前关闭 csv 文件对象

从答案中复制 here:将 df.to_csv 行替换为以下内容,其中文件对象在脚本终止之前明确关闭。

outfile = open(output_df, 'wb')
df.to_csv(outfile, index = False, header = True, sep = ',', encoding = 'utf-8')
outfile.close()