Reputation: 143
** 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
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