熊猫to_csv创建空的未指定文件

时间:2018-06-26 13:57:41

标签: python python-2.7 pandas csv 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')

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

我尝试过的事情:

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

我知道使用“ experimentHandler”比“纯”熊猫有一种更好的保存数据的方法,但是由于它以前工作过,所以到目前为止,我的知识仅限于我的同事对精神病的工作方式,因此我保留了该方法。我还有其他兼容性问题需要解决,但考虑到我目前所面临的时间压力,恐怕这是沉没的情况...

编辑:该工作示例现在应该可以正常工作,对此表示歉意!

1 个答案:

答案 0 :(得分:0)

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

剧本终止前请先关闭心理

将此添加到脚本末尾:

w.close()
core.quit()

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

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

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