我有一个嵌套的字典,该字典用作查找表以将值分配给数据框字段。 该代码在运行时返回以下错误:
TypeError :(““系列”对象是可变的,因此无法进行散列”,“发生在索引0”)
我尝试使用get()函数,但收到相同的错误消息。
字典:
for (var jsonElement in jsonData) {
_events
.putIfAbsent(
DateTime.parse(jsonElement['tanggal']),
() => [],
)
.add(jsonElement['acara']);
}
在字典中查找值的代码,第一个字典值使用硬编码值,第二个字典值使用数据帧结构中的值。 它将从嵌套字典中检索到的值(使用数据框中行的Year值)保存为数据框的行,作为名为AdjustedResult的变量。
AdjFact= {
'Good':
{0: 0, 2010: 2.566, 2011: 1.77, 2012: 0.9658515212},
'Bad':
{0: 0, 2010: 3.222, 2011: 1.0423, 2012: 0.3534},
'Avg':
{0: 0, 2010: 1.30, 2011: 4.2, 2012: 1.01}
}
如果可以使用其他查找表(数据框等),则我不必特别使用AdjFact词典。
编辑:下面添加了代码-仅用于测试目的
我在下面硬编码了很多值和伪数据帧,只是为了可以测试代码的逻辑(即查找功能)
def lookup(row,lval):
df= df_dict[[row['A'],row['B']]
df['AdjustedResult'] = AdjFact[lval][df['Year']]
. . . . . . . (more code deleted)
return Total, Diff
newdf[['TotalGood' , 'DiffGood']] = newdf.apply(lookup, lval='Good', axis=1).apply(pd.Series)
newdf[['TotalBad' , 'DiffBad']] = newdf.apply(lookup, lval='Bad', axis=1).apply(pd.Series)
newdf[['TotalAvg' , 'DiffAvg']] = newdf.apply(lookup, lval='Avg', axis=1).apply(pd.Series)
答案 0 :(得分:1)
df['Year']
是一个系列(不能被散列,因此您不能在字典中查找它)。我怀疑您是说row['Year']
,该行的年份?
也就是说,
df['AdjustedResult'] = AdjFact[lval][df['Year']]
应为:
df['AdjustedResult'] = AdjFact[lval][row['Year']]
-
更新:在您的最新示例中,您似乎想要查找每一行的值(我在第一个示例中错过了它):
ipdb> m_df['Year'].map(AdjFact[lval])
0 0.000
1 0.000
2 2.566
3 2.566
4 1.770
Name: Year, dtype: float64
因此您应该使用:
m_df['AdjustedResult'] = m_df['Year'].map(AdjFact[lval])