首页 > 解决方案 > 无法使用 df.at 更改 DataFrame 值

问题描述

** 无法使用 df.at 更改 DataFrame 值**

数据框:

import pandas as pd

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

代码:

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]

输出:

          A       B
0       sani     nan
1      akshay     1
2        jay     nan

例外输出:

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

附加上下文

如果字典键值是列表对象,则无法复制。

标签: pythonpandasdataframe

解决方案


我首先将字符串替换'nan'NaN,然后使用mapwith fillna(),如下所示:

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

印刷:

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

推荐阅读