我有一个Pandas数据框,其中只有2列:第一列是名称,第二列是与该名称相关的信息字典。添加新行可以正常工作,但是如果我试图通过分配一个新字典来更新字典列,我得到
ValueError: Incompatible indexer with Series
所以,确切地说,这就是我所做的产生错误的事情:
import pandas as pd
df = pd.DataFrame(data=[['a', {'b':1}]], columns=['name', 'attributes'])
pos = df[df.loc[:,'name']=='a'].index[0]
df.loc[pos, 'attributes'] = {'c':2}
我找到了另一个似乎有效的解决方案:
import pandas as pd
df = pd.DataFrame(data=[['a', {'b':1}]], columns=['name', 'attributes'])
pos = df[df.loc[:,'name']=='a'].index[0]
df.loc[:,'attributes'].at[pos] = {'c':2}
,但我希望得到一个答案,为什么第一个方法不工作,或者如果有什么问题,我最初有它。
由于您试图访问索引为'pos'的数据框,因此必须使用iloc来访问行。因此,像下面这样更改最后一行将按预期工作:
df.iloc[pos]['attributes'] = {'c':2}
For me workingDataFrame.at
:
df.at[pos, 'attributes'] = {'c':2}
print (df)
name attributes
0 a {'c': 2}