Как преобразовать словарь в столбцы датафрейма?
имею столбец датафрейма,в котором строки записаны как словарь, в котором значения в списке. Пример строки :
{'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