Akshay Tarpara
Akshay Tarpara

Reputation: 143

DataFrame Value Can't Changed Using df.at

** DataFrame Value Can't Changed Using df.at**

DataFrame :

import pandas as pd

df = pd.DataFrame({"A" : ['sani','akshay','jay'],
                  "B" : ['nan',1,'nan']})

Code:

d1 = {
    "sani" : [100] ,
    "himanshu" : [4],
    "jay" : [45]
}
for i,row in df.iterrows() :
    if row['B'] == 'nan':
        key = row['A']
        df.at[i,'B'] = d1[key]

Output:

          A       B
0       sani     nan
1      akshay     1
2        jay     nan

Excepted Output:

          A       B
0       sani     [100]
1      akshay     1
2        jay     [45]

Additional context

Can't Copy If Dictionary Keys Value are List Object.

Upvotes: 1

Views: 90

Answers (1)

sophocles
sophocles

Reputation: 13821

I would first replace string 'nan' with NaN, and then use map with fillna() as follows:

df['B'] = df['A'].map(d1).replace('nan',np.nan).fillna(df['B'])

prints:

        A      B
0    sani  [100]
1  akshay      1
2     jay   [45]

Upvotes: 1

Related Questions