我有几个.txt文件包含反应时间(标题:'RT')和正确与不正确的响应(标题:'错误',零正确,标题不正确)。这与本书略有不同:“实验心理学家的Python”。
现在我想使用布尔向量从numpy数组中选择值(例如,只有正确响应的反应时间)。运行python脚本会导致以下错误:
选择['correct'] = data ['error'] == 0
KeyError:'错误'
以下是我正在处理的代码:
import numpy as np
import glob
import os
# read in file paths
DIR = os.path.dirname(os.path.abspath(__file__))
DATA_DIR = os.path.join(DIR, 'Pilotdata')
# define total number of participants
N = 27
counter = 0
# create empty arrays to store data
rt = np.zeros((2, 2, N))
data_file = glob.glob(os.path.join(DATA_DIR, 's[0-9][0-9]_main_data.txt'))
# read in data
for pnr in range(0, N):
counter += 1
RAW = np.loadtxt(data_file[counter], dtype=str, unpack=True)
data = {}
for i in range(len(RAW)):
VARNAME = RAW[i][0]
try:
VALUES = RAW[i][1:].astype(float)
except:
VALUES = RAW[i][1:]
data[VARNAME] = VALUES
select = {}
select['correct'] = data['error'] == 0
select['incorrect'] = data['error'] == 1
这似乎是我创建的用于存储值的字典的问题。所以这里是输出的摘录:
"b'error'": array([
"b'0'", "b'0'", "b'0'", "b'0'", "b'0'", "b'0'", "b'0'", "b'1'",
"b'0'", "b'1'", "b'0'", "b'0'", "b'0'", "b'0'", "b'0'", "b'0'",
"b'0'", "b'0'", "b'1'", "b'0'", "b'1'", "b'1'", "b'0'", "b'1'", ...
提前致谢!
编辑:将Python解释器从3更改为2就可以了。有没有办法让代码在Python3中运行?
EDIT2 :使用np.genfromtxt
代替np.loadtxt
解决了这个问题。
答案 0 :(得分:0)
我认为问题在于您将数组读取为字节文字(请参阅documentation),因此您的字典不包含字符串"错误"作为一个关键,而不是字节文字' b"错误"'。您可以通过for i in range(len(RAW)):
VARNAME = RAW[i][0].decode("utf-8")
try:
VALUES = RAW[i][1:].decode("utf-8").astype(float)
except:
VALUES = RAW[i][1:]
# I am not even sure what you are trying to
# catch here
对其进行解码:
numpy.loadtxt
这可能/应该做的伎俩。显然RAW = np.loadtxt(data_file[counter], dtype=str, unpack=True).astype(str)
以字节模式运行,这是Python 2中的默认字符串类型(你使用Python 2吗?如果是,请转到Python 3,它更酷!:D)。有关详细信息,请查看精彩的解释here,其中人们还建议您使用SELECT name, Min(price) FROM phones where name like '%".$nameofproduct."%'
在阅读文件时省去麻烦。
答案 1 :(得分:0)
使用np.genfromtxt
代替np.loadtxt
解决了问题。