У меня есть следующий Джейсон:
{'ADA': {'free': '0.00000000', 'locked': '1.32580000'},
'ADX': {'free': '15.0000000', 'locked': '0.00000000'},
'AE': {'free': '0.23000000', 'locked': '1.253000000'},
'ZRX': {'free': '0.00000000', 'locked': '0.00000000'}}
Я пытаюсь преобразовать вышеупомянутого Джейсона в панд, но только строки с суммой <> 0 в «бесплатно» или в «заблокировано» + без «0», когда они не нужны, поэтому ZRX в отношении приведенного выше примера не будет отображаться и 1.2530000 будет всего 1.253
Моими желаемыми пандами будут:
free locked
ADA 0 1.3258
ADX 15 0
AE 0.23 1.253
Спасибо за помощь!
Джейсон? Вы имеете в виду JSON?
Я считаю, что вам сначала нужно DataFrame.from_dict
, затем преобразовать в числа с плавающей запятой и отфильтровать по Series.ne
с boolean indexing
, последним для строк без трейлинга 0
используйте это решение:
d = {'ADA': {'free': '0.00000000', 'locked': '1.32580000'},
'ADX': {'free': '15.0000000', 'locked': '0.00000000'},
'AE': {'free': '0.23000000', 'locked': '1.253000000'},
'ZRX': {'free': '0.00000000', 'locked': '0.00000000'}}
df = pd.DataFrame.from_dict(d,orient='index')
df = df.astype(float)
df = df[df['free'].ne(0) | df['locked'].ne(0)].applymap('{0:g}'.format)
#if need remove 0 from all rows
#df = df[df.ne(0).any(axis=1)].applymap('{0:g}'.format)
print (df)
free locked
ADA 0 1.3258
ADX 15 0
AE 0.23 1.253
почему при попытке сделать free+locked я получаю только free? даже после того, как я изменю df на float?
@Giladbi - Не уверен, что понял, можешь объяснить подробнее? Как вы получаете значения? Если проверить print (df.dtypes)
, нет ли обоих столбцов с плавающей запятой?
это объект. Я меняю его на «df = df.astype(float)» и все равно получаю a+b =a или b+a =b
@Giladbi - Данные конфиденциальны?
Я добавил «баланс ['Общая позиция'] = (баланс ['заблокировано']) + (баланс ['свободно'])», и результаты: свободно заблокировано Общая позиция AAA 2,99831 0 02,99831
Столбцы данных (всего 3 столбца): свободные 7 непустых объектов заблокированы 7 непустых объектов Общая позиция 7 непустых объектов dtypes: object(3)
@Giladbi - Итак, я думаю, проблема в applymap('{0:g}'.format)
- он преобразует числа с плавающей запятой в строки. Так что нужно df = df.astype(float)
а потом df['Total Position'] = (df['locked']) + (df['free'])
и последнее df = df[df['free'].ne(0) | df['locked'].ne(0)].applymap('{0:g}'.format)
Вы можете использовать:
json = {'ADA': {'free': '0.00000000', 'locked': '1.32580000'},
'ADX': {'free': '15.0000000', 'locked': '0.00000000'},
'AE': {'free': '0.23000000', 'locked': '1.253000000'},
'ZRX': {'free': '0.00000000', 'locked': '0.00000000'}}
df = pd.DataFrame.from_dict(json).astype(float).transpose()
df = df.applymap(lambda s: str(s).rstrip('0').rstrip('.') if '.' in str(s) else s)
df = df[~((df['free']=='0') & (df['locked']=='0'))] # This is to drop row containing all zeros
print(df)
free locked
ADA 0 1.3258
ADX 15 0
AE 0.23 1.253
Покажите, что вы пробовали.