Панды to_csv создает пустой, неопределенный файл - PullRequest
0 голосов
/ 26 июня 2018

Я новичок в python и программировании в целом, так что это, вероятно, глупый вопрос.

В настоящее время я готовлю психологический эксперимент с использованием автономной версии PsychoPy v1.90.2, python 2.7, версии кодера, основанной как на существующем сценарии, так и на учебнике от коллеги. Он отлично работает на моем компьютере (Mac) и на компьютере с Windows 10, но на компьютере с Windows7 не сохраняет выходные данные (то есть ответы участника) в файл CSV. Создается пустой файл без какой-либо спецификации файла, но с правильным именем файла и в правильном месте.

  • Я могу правильно импортировать базовый CSV-файл для создания стимула
  • если я включу print df, я вижу кадр данных в консоли, поэтому данные существуют где-то, по крайней мере временно
  • Моя система (Mac) немецкая, но на компьютерах с Windows 10 и 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, плюс столбец «member», содержащий номер участника, и столбец «ans», содержащий нажатия клавиш, выполняемые участником.

Что я пробовал:

  • разные версии психопии, кроме той, что использует питон 3
  • Я подозревал, что проблема кодирования b / c различных раскладок клавиатуры, поэтому я изменил это, но без изменений (и не было проблемы на бельгийских французских компьютерах)
  • Предлагаемые здесь решения: Изменить кодировку Python по умолчанию?
  • В именах файлов нет специальных символов, и не во всех прочитанных CSV-файлах, но все они не сохраняются.
  • использованные права администратора на компьютере

Я знаю, что есть лучший способ сохранить данные, чем "чистые" панды, с помощью эксперимента Хендлера, но, поскольку он работал раньше, и мои знания до сих пор ограничены тем, как мой коллега работает с психопатией, я сохранил этот метод. У меня были другие проблемы с совместимостью, которые мне удалось решить, и я боюсь, что из-за нехватки времени, в которой я сейчас нахожусь, это затонувшая ситуация ...

РЕДАКТИРОВАТЬ : рабочий пример теперь должен работать, извините за это!

1 Ответ

0 голосов
/ 27 июня 2018

Данные csv записываются ("сбрасываются"), когда скрипт завершается. Вероятно, проблема заключается в том, что он зависает по причинам, связанным с ОС, в Windows 7. Я видел это раньше и решил двумя способами:

Закрыть психопию до завершения сценария

Добавьте это в конец скрипта:

w.close()
core.quit()

Закрыть объект файла csv до завершения скрипта

Скопировано из ответа здесь : замените строку df.to_csv на следующую, где объект файла явно закрыт до завершения сценария.

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