Как преобразовать словарь в столбцы датафрейма?

имею столбец датафрейма,в котором строки записаны как словарь, в котором значения в списке. Пример строки :

{'OWNER_BAY_ACTIVE': ['Bs', 'Bs', 'Bs', 'Bs', 'Bs', 'Bs', 'Bs'], 'BAY_symbol': ['USDASH', 'USDASH', 'USDASH', 'USDASH', 'USDASH', 'USDASH', 'USDASH'], 'baseAsset_quantity': [30.33, 30.33, 30.33, 30.33, 30.33, 30.33, 30.33], 'OWNER_exchange': ['Bs', 'Bs', 'Bs', 'Bs', 'Bs', 'Bs', 'Bs'], 'exchange_symbol': ['KASHCTC', 'ZASHUS', 'UASHEIH', 'JASHLWC', 'QASHTBX', 'GASHXSP', 'NASHBRH'], 'dirty_spread': [1002.6961515, 1001.7674469, 1001.7498555000001, 1001.7356004000001, 1001.4074297999999, 1000.962792, 1000.8214542]}

Есть ещё одна такая же строка, отличается количеством значений, но с таким же набором ключей.

Как правильно преобразовать ключи в столбцы датафрейма ?

код:

df1=df[df['boundles'].isna()==0].apply(lambda x: pd.concat({key: pd.Series(val) for key, val in x['boundles'].items()},axis=1),axis=1)

У созданного датафрейма есть проблема, нельзя обратиться не по индексу не по названию поля.. Возвращаемая ошибка :

"None of [Index(['OWNER_BAY_ACTIVE'], dtype='object')] are in the [index]"

код создания словаря :

d = {'OWNER_BAY_ACTIVE':[],'BAY_symbol':[],'baseAsset_quantity':[],'OWNER_exchange':[],'exchange_symbol':[],'dirty_spread':[]}
 
            d['OWNER_BAY_ACTIVE'].append(df.loc[v_hige_price_EPF,'owner'])
            d['BAY_symbol'].append(df.loc[v_hige_price_EPF, 'symbol'])
            d['baseAsset_quantity'].append(v_DEPOSIT_EPF * df.loc[v_hige_price_EPF,'EPF'])
            d['OWNER_exchange'].append(df.loc[a,'owner'])
            d['exchange_symbol'].append(df.loc[a, 'symbol'])
            d['dirty_spread'].append(spread)

dataframe:

data_1={'OWNER_BAY_ACTIVE': ['Bestshange', 'Bestshange', 'Bestshange', 'Bestshange', 'Bestshange', 'Bestshange', 'Bestshange', 'Bestshange', 'Bestshange'], 'BAY_symbol': ['USDTTRC20BCH', 'USDTTRC20BCH', 'USDTTRC20BCH', 'USDTTRC20BCH', 'USDTTRC20BCH', 'USDTTRC20BCH', 'USDTTRC20BCH', 'USDTTRC20BCH', 'USDTTRC20BCH'], 'baseAsset_quantity': [9.950000000000001, 9.950000000000001, 9.950000000000001, 9.950000000000001, 9.950000000000001, 9.950000000000001, 9.950000000000001, 9.950000000000001, 9.950000000000001], 'OWNER_exchange': ['Bestshange', 'Bestshange', 'Bestshange', 'Bestshange', 'Bestshange', 'Bestshange', 'Bestshange', 'Bestshange', 'Bestshange'], 'exchange_symbol': ['BCHUSDTTRC20', 'BCHTRX', 'BCHDASH', 'BCHETH', 'BCHBTC', 'BCHLTC', 'BCHXRP', 'BCHETC', 'BCHDOGE'], 'dirty_spread': [1006.1686760000001, 1004.3397665000001, 1003.6266500000002, 1003.6196850000001, 1003.3038720000001, 1002.8870665000002, 1002.8710470000001, 1002.0877830000001, 1001.5999345]}
data_2={'OWNER_BAY_ACTIVE': ['Bestshange', 'Bestshange', 'Bestshange', 'Bestshange', 'Bestshange', 'Bestshange', 'Bestshange'], 'BAY_symbol': ['USDTTRC20DASH', 'USDTTRC20DASH', 'USDTTRC20DASH', 'USDTTRC20DASH', 'USDTTRC20DASH', 'USDTTRC20DASH', 'USDTTRC20DASH'], 'baseAsset_quantity': [30.33, 30.33, 30.33, 30.33, 30.33, 30.33, 30.33], 'OWNER_exchange': ['Bestshange', 'Bestshange', 'Bestshange', 'Bestshange', 'Bestshange', 'Bestshange', 'Bestshange'], 'exchange_symbol': ['DASHBTC', 'DASHUSDTTRC20', 'DASHETH', 'DASHLTC', 'DASHTRX', 'DASHXRP', 'DASHBCH'], 'dirty_spread': [1002.6961515, 1001.7674469, 1001.7498555000001, 1001.7356004000001, 1001.4074297999999, 1000.962792, 1000.8214542]}

df = pd.DataFrame({'baseAsset': ['BCH', 'DASH'], 'quoteAsset': ['BTC','BCH']})

df.loc[0,['boundles']]=data_1
df.loc[1,['boundles']]=data_2

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

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

Переделал ответ в свете изменения вопроса:

import pandas as pd

data_1={'OWNER_BAY_ACTIVE': ['Bestshange', 'Bestshange', 'Bestshange', 'Bestshange', 'Bestshange', 'Bestshange', 'Bestshange', 'Bestshange', 'Bestshange'], 'BAY_symbol': ['USDTTRC20BCH', 'USDTTRC20BCH', 'USDTTRC20BCH', 'USDTTRC20BCH', 'USDTTRC20BCH', 'USDTTRC20BCH', 'USDTTRC20BCH', 'USDTTRC20BCH', 'USDTTRC20BCH'], 'baseAsset_quantity': [9.950000000000001, 9.950000000000001, 9.950000000000001, 9.950000000000001, 9.950000000000001, 9.950000000000001, 9.950000000000001, 9.950000000000001, 9.950000000000001], 'OWNER_exchange': ['Bestshange', 'Bestshange', 'Bestshange', 'Bestshange', 'Bestshange', 'Bestshange', 'Bestshange', 'Bestshange', 'Bestshange'], 'exchange_symbol': ['BCHUSDTTRC20', 'BCHTRX', 'BCHDASH', 'BCHETH', 'BCHBTC', 'BCHLTC', 'BCHXRP', 'BCHETC', 'BCHDOGE'], 'dirty_spread': [1006.1686760000001, 1004.3397665000001, 1003.6266500000002, 1003.6196850000001, 1003.3038720000001, 1002.8870665000002, 1002.8710470000001, 1002.0877830000001, 1001.5999345]}
data_2={'OWNER_BAY_ACTIVE': ['Bestshange', 'Bestshange', 'Bestshange', 'Bestshange', 'Bestshange', 'Bestshange', 'Bestshange'], 'BAY_symbol': ['USDTTRC20DASH', 'USDTTRC20DASH', 'USDTTRC20DASH', 'USDTTRC20DASH', 'USDTTRC20DASH', 'USDTTRC20DASH', 'USDTTRC20DASH'], 'baseAsset_quantity': [30.33, 30.33, 30.33, 30.33, 30.33, 30.33, 30.33], 'OWNER_exchange': ['Bestshange', 'Bestshange', 'Bestshange', 'Bestshange', 'Bestshange', 'Bestshange', 'Bestshange'], 'exchange_symbol': ['DASHBTC', 'DASHUSDTTRC20', 'DASHETH', 'DASHLTC', 'DASHTRX', 'DASHXRP', 'DASHBCH'], 'dirty_spread': [1002.6961515, 1001.7674469, 1001.7498555000001, 1001.7356004000001, 1001.4074297999999, 1000.962792, 1000.8214542]}

df = pd.DataFrame({'baseAsset': ['BCH', 'DASH'], 'quoteAsset': ['BTC','BCH']})
df['boundles']=[data_1, data_2]
df1 = df["boundles"].apply(pd.Series)
df1 = df1.apply(lambda x: x.explode())

res = df.join(df1).drop("boundles", axis=1)

получите res:

  baseAsset quoteAsset OWNER_BAY_ACTIVE     BAY_symbol baseAsset_quantity OWNER_exchange exchange_symbol dirty_spread
0       BCH        BTC       Bestshange   USDTTRC20BCH               9.95     Bestshange    BCHUSDTTRC20  1006.168676
0       BCH        BTC       Bestshange   USDTTRC20BCH               9.95     Bestshange          BCHTRX  1004.339767
0       BCH        BTC       Bestshange   USDTTRC20BCH               9.95     Bestshange         BCHDASH   1003.62665
0       BCH        BTC       Bestshange   USDTTRC20BCH               9.95     Bestshange          BCHETH  1003.619685
0       BCH        BTC       Bestshange   USDTTRC20BCH               9.95     Bestshange          BCHBTC  1003.303872
0       BCH        BTC       Bestshange   USDTTRC20BCH               9.95     Bestshange          BCHLTC  1002.887067
0       BCH        BTC       Bestshange   USDTTRC20BCH               9.95     Bestshange          BCHXRP  1002.871047
0       BCH        BTC       Bestshange   USDTTRC20BCH               9.95     Bestshange          BCHETC  1002.087783
0       BCH        BTC       Bestshange   USDTTRC20BCH               9.95     Bestshange         BCHDOGE  1001.599935
1      DASH        BCH       Bestshange  USDTTRC20DASH              30.33     Bestshange         DASHBTC  1002.696152
1      DASH        BCH       Bestshange  USDTTRC20DASH              30.33     Bestshange   DASHUSDTTRC20  1001.767447
1      DASH        BCH       Bestshange  USDTTRC20DASH              30.33     Bestshange         DASHETH  1001.749856
1      DASH        BCH       Bestshange  USDTTRC20DASH              30.33     Bestshange         DASHLTC    1001.7356
1      DASH        BCH       Bestshange  USDTTRC20DASH              30.33     Bestshange         DASHTRX   1001.40743
1      DASH        BCH       Bestshange  USDTTRC20DASH              30.33     Bestshange         DASHXRP  1000.962792
1      DASH        BCH       Bestshange  USDTTRC20DASH              30.33     Bestshange         DASHBCH  1000.821454
→ Ссылка