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

标签 python python-2.7 pandas csv psychopy

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

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

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

<p></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 最初包含的所有信息,加上包含参与者编号的“参与者”列和包含参与者执行的按键操作的“ans”列。

我尝试过的:

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

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

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

最佳答案

csv 数据在脚本终止时写入(“刷新”)。该问题很可能是由于 Windows 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()

关于python - pandas to_csv 创建空的、未指定的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51044704/

相关文章:

python - djangocms-installer 不询问设置问题

python - MySQL 和 python 。如何查询 WHERE 'column' IN 元组

python - 如何从元组列表中找到频率最高的 3 个元素?

python - Pandas 中两个数据框之间的差异

python - 使用 Pandas 返回排序行的索引值?

python - QMenu 剥离的信号或事件

python - 如何测试 matplotlib 的 show() 显示图形而不实际显示它?

python - 如何将 NumPy 数组与 ctypes 一起使用?

python - 将 json 元素添加到 pandas 数据框

python - 将python数据框转换为列表