如何按条件将Json转换为熊猫

时间:2019-04-07 12:56:44

标签: pandas

我有以下杰森:

{'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'}}

我正在尝试将上述Jason转换为熊猫,但是仅在不需要时仅在“免费”或“锁定” +不包含“ 0”的情况下将行数>> 0的行,因此关于上述示例的ZRX将不会所示,而1.2530000将仅为1.253

我想要的熊猫是:

    free   locked
ADA 0      1.3258
ADX 15     0
AE  0.23   1.253

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

我相信您首先需要DataFrame.from_dict,然后再转换为浮点数,并用Series.neboolean indexing过滤,最后是不带尾随0的字符串,请使用this solution:< / p>

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

答案 1 :(得分:2)

您可以使用:

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