首页 > 解决方案 > pandas to_csv 创建空的、未指定的文件

问题描述

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

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

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”列。

我尝试了什么:

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

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

标签: pythonpython-2.7pandascsvpsychopy

解决方案


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

在脚本终止之前关闭psychopy

将此添加到脚本的末尾:

w.close()
core.quit()

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

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

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

推荐阅读