Как заполнить столбец pandas словарем?

Коллеги, такой вопрос возник, есть столбец pandas с пустыми значениями, как его заполнить именно словарем.

То есть должно получится:

      asset                        wk
0   RTSI.ME  {0: 1, 1: 0.24, 2: 0.45}
1       BTC  {0: 1, 1: 0.24, 2: 0.45}
2  DX-Y.NYB  {0: 1, 1: 0.24, 2: 0.45}
3      GC=F  {0: 1, 1: 0.24, 2: 0.45}
4      BZ=F  {0: 0.5, 1: 0.3, 2: 0.2}
5     RUB=X  {0: 1, 1: 0.24, 2: 0.45}
6   RTSI.ME  {0: 1, 1: 0.24, 2: 0.45}

Но сейчас получается:
      asset                        wk
0   RTSI.ME  {0: 1, 1: 0.24, 2: 0.45}
1       BTC                       0.3
2  DX-Y.NYB                       0.2
3      GC=F                       NaN
4      BZ=F  {0: 0.5, 1: 0.3, 2: 0.2}
5     RUB=X                       NaN
6   RTSI.ME                       NaN

Pandas итерирует присваиваемое значение value. А нужно чтобы он этого не делал. Превратить присваиваемое значение в строку, тоже не вариант. Потому что его потом надо вытаскивать, чтобы передавать дальше, а как его преобразовать в словарь не знаю. Пробовал, обойти не используя fillna через loc, но примерно таже проблема с попыткой интегрировать передаваемое значение словаря.

base_table = pd.DataFrame(
    {'asset': ["RTSI.ME", 'BTC', 'DX-Y.NYB', "GC=F", 'BZ=F', 'RUB=X', 'RTSI.ME'],
     "wk": [{0: 1, 1: 0.24, 2: 0.45}, np.NAN ,  np.NAN,  np.NAN,  {0: 0.5, 1: 0.3, 2: 0.2},  np.NAN, np.NAN]})  # добавляем базовые значения
base_table["wk"]=table["wk"].fillna(value={0: 0.5, 1: 0.3, 2: 0.2})#Заполняем пустые для которых значения не вычислены значениями по умолчанию. Конечно каждое значение wk добавить в свой столбец, но не хотелось бы идти по такому пути, потому что заполнять таблицу не удобно.  

Ответы (2 шт):

Автор решения: splash58

Сделайте список со словарями нужной длины. Тогда pandas их расставит

df.loc[df['wk'].isnull(), 'wk'] = [{0: 0.5, 1: 0.3, 2: 0.2}]*len(df.loc[df['wk'].isnull()])

      asset                        wk
0   RTSI.ME  {0: 1, 1: 0.24, 2: 0.45}
1       BTC  {0: 0.5, 1: 0.3, 2: 0.2}
2  DX-Y.NYB  {0: 0.5, 1: 0.3, 2: 0.2}
3      GC=F  {0: 0.5, 1: 0.3, 2: 0.2}
4      BZ=F  {0: 0.5, 1: 0.3, 2: 0.2}
5     RUB=X  {0: 0.5, 1: 0.3, 2: 0.2}
6   RTSI.ME  {0: 0.5, 1: 0.3, 2: 0.2}
→ Ссылка
Автор решения: strawdog

Делайте автозаполнение, например:

df["wk"] = df["wk"].fillna(method="ffill")
      asset                        wk
0   RTSI.ME  {0: 1, 1: 0.24, 2: 0.45}
1       BTC  {0: 1, 1: 0.24, 2: 0.45}
2  DX-Y.NYB  {0: 1, 1: 0.24, 2: 0.45}
3      GC=F  {0: 1, 1: 0.24, 2: 0.45}
4      BZ=F  {0: 0.5, 1: 0.3, 2: 0.2}
5     RUB=X  {0: 0.5, 1: 0.3, 2: 0.2}
6   RTSI.ME  {0: 0.5, 1: 0.3, 2: 0.2}

И вообще, непонятно, зачем вам словарь. Разверните его в датафрейм:

res = pd.concat([df["asset"], df["wk"].apply(pd.Series)], axis=1)

res:

      asset    0     1     2
0   RTSI.ME  1.0  0.24  0.45
1       BTC  1.0  0.24  0.45
2  DX-Y.NYB  1.0  0.24  0.45
3      GC=F  1.0  0.24  0.45
4      BZ=F  0.5  0.30  0.20
5     RUB=X  0.5  0.30  0.20
6   RTSI.ME  0.5  0.30  0.20
→ Ссылка