Как заполнить столбец 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