编辑:看起来这是 Pandas 中的一个潜在错误。查看@NicMoetsch 提出的这个 GitHub问题,注意到使用字典值分配的意外行为与框架__setitem__()
和__getitem__()
.
在我之前的代码中,我用字典重命名了一些列:
cols_dict = {
'Long_column_Name': 'first_column',
'Other_Long_Column_Name': 'second_column',
'AnotherLongColName': 'third_column'
}
for key, val in cols_dict.items():
df.rename(columns={key: val}, inplace=True)
Run Code Online (Sandbox Code Playgroud)
(我知道这里不需要循环——在我的实际代码中,我必须在数据帧列表中搜索数据帧的列,并获得字典键的子字符串匹配。)
后来我做了一些清理applymap()
,索引字典值,它工作正常
pibs[cols_dict.values()].applymap(
lambda x: np.nan if ':' in str(x) else x
)
Run Code Online (Sandbox Code Playgroud)
但是当我尝试将切片分配回自身时,我收到一个关键错误(此处为完整错误消息)。
pibs[cols_dict.values()] = pibs[cols_dict.values()].applymap(
lambda x: np.nan if ':' in str(x) else x
)
Run Code Online (Sandbox Code Playgroud)
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
~/.local/lib/python3.7/site-packages/pandas/core/indexes/base.py in get_loc(self, key, method, tolerance)
3079 try:
-> 3080 return self._engine.get_loc(casted_key) …
Run Code Online (Sandbox Code Playgroud) 似乎KeyError
消息的管理方式与其他错误不同.例如,如果我想使用颜色,它将适用于IndexError
但不适用于KeyError
:
err_message = '\x1b[31m ERROR \x1b[0m'
print err_message
raise IndexError(err_message)
raise KeyError(err_message)
Run Code Online (Sandbox Code Playgroud)
知道为什么吗?有没有办法绕过它?(我真的需要KeyError
提出类型的例外,以便以后能够捕获它)
我在 Chollet 的书 Deep Learning with Python 的第 3.7 节。该项目旨在找出 1970 年代特定波士顿郊区的房屋价格中位数。
在“使用 K 折验证验证我们的方法”部分,我尝试运行以下代码块:
num_epochs = 500
all_mae_histories = []
for i in range(k):
print('processing fold #', i)
# Prepare the validation data: data from partition # k
val_data = train_data[i * num_val_samples: (i + 1) * num_val_samples]
val_targets = train_targets[i * num_val_samples: (i + 1) * num_val_samples]
# Prepare the training data: data from all other partitions
partial_train_data = np.concatenate(
[train_data[:i * num_val_samples],
train_data[(i + 1) * …
Run Code Online (Sandbox Code Playgroud) 使用Python列表,您可以切片带有负索引
a = [1,2,3,4,5,6,7,8,9]
print a[-1]
Run Code Online (Sandbox Code Playgroud)
将按预期打印9。
然而,
a=pd.Series([1,2,3,4,5,6,7,8,9])
print a[-1]
Run Code Online (Sandbox Code Playgroud)
给出KeyError:-1L
我正在尝试将我的GRU模型与我的训练数据相匹配时遇到问题.快速浏览StackOverflow后,我发现这篇文章与我的问题非常相似:
我自己的模型如下:
nn = Sequential()
nn.add(Embedding(input_size, hidden_size))
nn.add(GRU(hidden_size_2, return_sequences=False))
nn.add(Dropout(0.2))
nn.add(Dense(output_size))
nn.add(Activation('linear'))
nn.compile(loss='mse', optimizer="rmsprop")
history = History()
nn.fit(X_train, y_train, batch_size=30, nb_epoch=200, validation_split=0.1, callbacks=[history])
Run Code Online (Sandbox Code Playgroud)
错误是:
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-14-e2f199af6e0c> in <module>()
1 history = History()
----> 2 nn.fit(X_train, y_train, batch_size=30, nb_epoch=200, validation_split=0.1, callbacks=[history])
C:\Users\XXXX\AppData\Local\Continuum\Anaconda\lib\site-packages\keras\models.pyc in fit(self, X, y, batch_size, nb_epoch, verbose, callbacks, validation_split, validation_data, shuffle, show_accuracy, class_weight, sample_weight)
487 verbose=verbose, callbacks=callbacks,
488 val_f=val_f, val_ins=val_ins,
--> 489 shuffle=shuffle, metrics=metrics)
490
491 def predict(self, X, batch_size=128, verbose=0): …
Run Code Online (Sandbox Code Playgroud) 我有一个格式为的字典 {int:[]}
当我尝试将值设置为值列表为 NULL 的键值对时,我得到了 KeyError: 2
tags = {}
tags.setdefault(int,[])
for tag_id in (db.session.query(PostTagRel).filter(PostTagRel.id == post_id).first().tag_id.split(',')):
tag = db.session.query(Tag).filter(Tag.tag_id == tag_id).first().tag_name
tags[post_id].append(tag)
Run Code Online (Sandbox Code Playgroud)
我该怎么办?
在C++
,当我在表中找不到关键字时,它将返回NULL
或在数据库中它将返回一个空表,因此程序继续运行。但是在 中python
,它会抛出一个exception
,并中断我的程序。我可以避免吗?例如,我有一个名为的 DataFrame datevar
:
(datetimeIndex) value
2001-01-01 1
2001-01-02 1
2001-01-03 3
....
v = datevar.xs('2000-01-01', level='date') # of course "keyError"
v = datevar.loc['2000-01-01' , :] # of course "keyError"
Run Code Online (Sandbox Code Playgroud) 最近我在使用deepreplay 包时遇到了一个问题,因为它的 Traceback 如下:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-43-c3b5d8180301> in <module>()
----> 1 model.fit(X, y, epochs=50, batch_size=16, callbacks=[replay])
2 frames
/usr/local/lib/python3.7/dist-packages/keras/utils/traceback_utils.py in error_handler(*args, **kwargs)
65 except Exception as e: # pylint: disable=broad-except
66 filtered_tb = _process_traceback_frames(e.__traceback__)
---> 67 raise e.with_traceback(filtered_tb) from None
68 finally:
69 del filtered_tb
/usr/local/lib/python3.7/dist-packages/deepreplay/callbacks.py in on_train_begin(self, logs)
83 self.n_epochs = self.params['epochs']
84
---> 85 self.group = self.handler.create_group(self.group_name)
86 self.group.attrs['samples'] = self.params['samples']
87 self.group.attrs['batch_size'] = self.params['batch_size']
/usr/local/lib/python3.7/dist-packages/h5py/_hl/group.py in create_group(self, name, track_order)
63 …
Run Code Online (Sandbox Code Playgroud) 我最近开始学习 Python,我想编写一个脚本来从 CSV 列(格式为 YYYY/DD/MM)中提取一个月中的哪一天,然后将网站用户与一个月中的几天(最终是一个月的几周)进行比较) 作为挑战/学习练习。要点是它提取 CSV 信息,将其格式化/转换为整数,并将其作为字典将其重新组合在一起,将第 1-31 天与站点访问者的数量进行比较。
我的代码如下。我收到的错误是 'KeyError: 1' on line 29 result[days] = users
。我想我明白发生了什么(有点 - 我猜它对我尝试为空字典分配值的方式不满意?它似乎正在寻找整数 1 作为键但没有找到它? ) 但我不知道接下来要做什么。我学习 Python 大约 2 周,所以我希望这不是一个太愚蠢的问题。我究竟做错了什么?如何使 users_by_day 索引 [0] 和 [1] 处的列成为字典中的键和值?
注意:我正在学习和使用 Python 3。
import csv
result = {}
with open('analytics.csv') as csv_file:
csv_reader = csv.reader(csv_file, delimiter=',')
line_count = 0
users_by_day = list(csv_reader)
for row in users_by_day: #iterate through data
day = row[0].split('/') #split date to extract day of month
try: #skip unsplit cells
day …
Run Code Online (Sandbox Code Playgroud) 一个pandas.DataFrame.explode
作品如何?
在文档中:
https://pandas.pydata.org/pandas-docs/version/0.25/reference/api/pandas.DataFrame.explode.html
Run Code Online (Sandbox Code Playgroud)df = pd.DataFrame({'A': [[1, 2, 3], 'foo', [], [3, 4]], 'B': 1}) display(df) print(df.columns) print(df.dtypes) df.explode('A')
工作得很好。但是对于我的数据,它因一个关键异常而失败。我的数据最初是这样的:
具有以下类型:
print(foo.columns)
print(foo.dtypes)
Index(['model', 'id_min_days_cutoff'], dtype='object')
model object
id_min_days_cutoff int64
dtype: object
Run Code Online (Sandbox Code Playgroud)
其中model
是使用 statsmodels 回归获得的:
model.summary2().tables[1]
Run Code Online (Sandbox Code Playgroud)
调用时:df.explode('model')
它失败了:
KeyError: 0
Run Code Online (Sandbox Code Playgroud)
试图重现这一点:
df_json = df.to_json()
# now load it again for SF purposes
df_json = '{"model":{"0":{"Coef.":{"ALQ_15PLUS_perc":95489.7866599741,"AST_perc":-272.9213162565,"BEV_UNTER15_perc":6781.448845533,"BEV_UEBER65_perc":-46908.2889142205},"Std.Err.":{"ALQ_15PLUS_perc":1399665.9788843254,"AST_perc":1558.1286516172,"BEV_UNTER15_perc":2027111.8764156068,"BEV_UEBER65_perc":1230965.9812726702},"z":{"ALQ_15PLUS_perc":0.0682232676,"AST_perc":-0.1751596802,"BEV_UNTER15_perc":0.0033453747,"BEV_UEBER65_perc":-0.038106893},"P>|z|":{"ALQ_15PLUS_perc":0.9456079052,"AST_perc":0.8609541651,"BEV_UNTER15_perc":0.9973307821,"BEV_UEBER65_perc":0.9696024555},"[0.025":{"ALQ_15PLUS_perc":-2647805.1223393031,"AST_perc":-3326.7973567063,"BEV_UNTER15_perc":-3966284.8215624653,"BEV_UEBER65_perc":-2459557.2784026605},"0.975]":{"ALQ_15PLUS_perc":2838784.6956592514,"AST_perc":2780.9547241933,"BEV_UNTER15_perc":3979847.7192535317,"BEV_UEBER65_perc":2365740.7005742197}},"1":{"Coef.":{"ALQ_15PLUS_perc":-140539.5196612777,"AST_perc":142.579413527,"BEV_UNTER15_perc":-45288.5612893498,"BEV_UEBER65_perc":-152106.9841374909},"Std.Err.":{"ALQ_15PLUS_perc":299852250.9155113101,"AST_perc":24013.7007484301,"BEV_UNTER15_perc":417010365.7919532657,"BEV_UEBER65_perc":171876588.9403209388},"z":{"ALQ_15PLUS_perc":-0.0004686959,"AST_perc":0.0059374194,"BEV_UNTER15_perc":-0.000108603,"BEV_UEBER65_perc":-0.0008849779},"P>|z|":{"ALQ_15PLUS_perc":0.9996260348,"AST_perc":0.9952626525,"BEV_UNTER15_perc":0.9999133474,"BEV_UEBER65_perc":0.9992938899},"[0.025":{"ALQ_15PLUS_perc":-587840151.997330904,"AST_perc":-46923.4091889186,"BEV_UNTER15_perc":-817370586.6933914423,"BEV_UEBER65_perc":-337024031.0927618742},"0.975]":{"ALQ_15PLUS_perc":587559072.9580082893,"AST_perc":47208.5680159725,"BEV_UNTER15_perc":817280009.5708128214,"BEV_UEBER65_perc":336719817.1244869232}}},"id_min_days_cutoff":{"0":2,"1":3}}'
pd.read_json(df_json).explode('model')
Run Code Online (Sandbox Code Playgroud)
失败:
KeyError: 0
Run Code Online (Sandbox Code Playgroud)
尝试使用以下方法之一找到替代方法:如何在 Pandas DataFrame 中取消嵌套(分解)一列?选择 2.1
pd.DataFrame({'model':np.concatenate(df_json.model.values)},
index=df_json.index.repeat(ddf_jsonf.model.str.len()))
Run Code Online (Sandbox Code Playgroud)
但这失败了:
ValueError: zero-dimensional arrays cannot be concatenated …
Run Code Online (Sandbox Code Playgroud) keyerror ×10
python ×8
pandas ×4
dictionary ×3
dataframe ×2
keras ×2
python-3.x ×2
csv ×1
exception ×1
explode ×1
h5py ×1
indexing ×1
series ×1
slice ×1
tensorflow ×1
theano ×1
valueerror ×1