Home > database >  Unable to update Pandas dataframe element with dictionary
Unable to update Pandas dataframe element with dictionary

Time:06-24

I have a Pandas dataframe where its just 2 columns: the first being a name, and the second being a dictionary of information relevant to the name. Adding new rows works fine, but if I try to updates the dictionary column by assigning a new dictionary in place, I get

ValueError: Incompatible indexer with Series

So, to be exact, this is what I was doing to produce the error:

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}

I was able to find another solution that seems to work:

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}

but I was hoping to get an answer as to why the first method doesn't work, or if there was something wrong with how I had it initially.

CodePudding user response:

Since you are trying to access a dataframe with an index 'pos', you have to use iloc to access the row. So changing your last row as following would work as intended:

df.iloc[pos]['attributes'] = {'c':2}

CodePudding user response:

For me working DataFrame.at:

df.at[pos, 'attributes'] = {'c':2}
print (df)
  name attributes
0    a   {'c': 2}
  • Related