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

Jul*_*iaC 5 python csv python-2.7 pandas psychopy

我是 Python 和编程的新手,所以这可能是一个愚蠢的问题。

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

  • 我可以正确导入底层 csv 文件以创建刺激
  • 如果我包含print df,我可以在控制台中看到数据框,所以数据存在于某处,至少是暂时的
  • 我的系统 (Mac) 是德语,但 Windows 10 和 7 计算机设置为法语
  • 根本没有错误信息。
  • 我之前在(比利时)法国 Mac 上成功完成了这个实验。

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

Run Code Online (Sandbox Code Playgroud)

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

我试过的:

  • 不同版本的psychopy,除了使用python 3的那个
  • 我怀疑不同键盘布局的编码问题 b/c,所以我改变了它,但没有改变(并且在比利时法国计算机上没有问题)
  • 这里提出的解决方案:Changing default encoding of Python?
  • 文件名中没有特殊字符,读入的所有 csv 文件中也没有,但它们都没有保存。
  • 在计算机上使用管理员权限

我知道有一种比使用 ExperimentHandler 保存数据的“纯”pandas 更好的方法,但是因为它以前有效,而且我到目前为止的知识仅限于我的同事使用 Psychopy 的方式,我保留了这种方法。我有其他兼容性问题,我设法解决了,而且鉴于我目前所处的时间压力,我担心这是一个成本沉没的情况......

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

Jon*_*løv 1

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

在脚本终止之前关闭psychopy

将其添加到脚本末尾:

w.close()
core.quit()
Run Code Online (Sandbox Code Playgroud)

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

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

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