pandas to_csv 创建空的、未指定的文件
pandas to_csv creates empty, unspecified file
我对 python 和一般编程都不熟悉,所以这可能是一个愚蠢的问题。
我目前正在准备一个心理学实验,使用独立的 PsychoPy v1.90.2,python 2.7,编码器版本,基于现有脚本和同事的教程。它在我的计算机 (Mac) 和 Windows 10 计算机上运行良好,但在使用 Windows7 的计算机上,它不会将输出(即参与者的响应)保存到.csv 文件。创建了一个空文件,没有任何文件规范,但文件名正确且位置正确。
- 我可以正确导入基础 csv 文件以创建刺激
- 如果我包含 print df,我可以在控制台中看到数据帧,所以数据存在于某处,至少是暂时的
- 我的系统(Mac)是德文的,但是Windows10和7电脑设置为法文
- 根本没有错误信息。
- 我之前在(比利时)法语 Mac 上成功地完成了这个实验。
</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"列由参与者。
我尝试了什么:
- 不同版本的 psychopy,除了那个使用 python 3
- 我怀疑不同键盘布局的编码问题 b/c,所以我更改了它,但没有任何更改(并且在比利时法语计算机上没有问题)
- 这里提出的解决方案:Changing default encoding of Python?
- 文件名中没有特殊字符,读入的所有csv文件中也没有,但都没有保存。
- 在计算机上使用了管理员权限
我知道有一种比 "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()
我对 python 和一般编程都不熟悉,所以这可能是一个愚蠢的问题。
我目前正在准备一个心理学实验,使用独立的 PsychoPy v1.90.2,python 2.7,编码器版本,基于现有脚本和同事的教程。它在我的计算机 (Mac) 和 Windows 10 计算机上运行良好,但在使用 Windows7 的计算机上,它不会将输出(即参与者的响应)保存到.csv 文件。创建了一个空文件,没有任何文件规范,但文件名正确且位置正确。
- 我可以正确导入基础 csv 文件以创建刺激
- 如果我包含 print df,我可以在控制台中看到数据帧,所以数据存在于某处,至少是暂时的
- 我的系统(Mac)是德文的,但是Windows10和7电脑设置为法文
- 根本没有错误信息。
- 我之前在(比利时)法语 Mac 上成功地完成了这个实验。
</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"列由参与者。
我尝试了什么:
- 不同版本的 psychopy,除了那个使用 python 3
- 我怀疑不同键盘布局的编码问题 b/c,所以我更改了它,但没有任何更改(并且在比利时法语计算机上没有问题)
- 这里提出的解决方案:Changing default encoding of Python?
- 文件名中没有特殊字符,读入的所有csv文件中也没有,但都没有保存。
- 在计算机上使用了管理员权限
我知道有一种比 "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()