2017-12-20 8 views
1

値:デコードAUの文字列でPythonのJSON」と10進私がデコードおよびDB、次の形式で到着した文字列にロードする必要が

"[{u'date': 1508760000000, u'value': 0}, {u'date': 1509364800000, u'value': Decimal('5.989999771118164')}, {u'date': 1509969600000, u'value': Decimal('5.989999771118164')}, {u'date': 1510574400000, u'value': Decimal('9.579999923706055')}]" 

現在のところ、これは私が使用したコードです

import pandas as pd 
import json 

#json for example: 
my_json="""[{u'date': 1508760000000, u'value': 0}, {u'date': 1509364800000, u'value': Decimal('5.989999771118164')}, {u'date': 1509969600000, u'value': Decimal('5.989999771118164')}, {u'date': 1510574400000, u'value': Decimal('9.579999923706055')}]""" 
my_json=my_json[1:-1] 
my_json=my_json.replace("u'","'") 
my_json=my_json.replace("'",'"') 
my_json=my_json.replace('Decimal("','') 
my_json=my_json.replace('")','') 
my_json=my_json.replace(', {','~ {') 
my_json_list=my_json.split('~') 
my_dict_list=[json.loads(row) for row in my_json_list] 
df=pd.DataFrame(my_dict_list) 

これを行うには、よりエレガントな方法がありますか?

+5

文字列は有効 'json'ではありません。 –

+5

その文字列はどこから来たのですか? 'dict'のpython' list'の 'print'(各文字列の前に' u'がUnicode文字列であることを意味します)からコピーされたもので、実際には有効なJSONではないようです。 – Galen

+2

文字列を 'ast'を使ってリテラル構造に変換することができます: ' import ast; ast.literal_eval(文字列) 'しかし、あなたのケースでは、Decimalオブジェクトがあり、それは動作しませんが、あなたが問題を解決するこの[回答](https://stackoverflow.com/a/18178379/3540693)をチェックすることができます。 – Pentux

答えて

6

使用すると、あなたが提供evalすなわち

from decimal import * 
df = pd.DataFrame(eval(my_json)) 

      date    value 
0 1508760000000     0 
1 1509364800000 5.989999771118164 
2 1509969600000 5.989999771118164 
3 1510574400000 9.579999923706055 
+2

'from decimal import *'は賢明です;) – jezrael

+1

'from decimal import Decimal'は十分でしょうが、この文字列をデータとしてインポートする必要があります。弁護士のリスト... –

+0

@JohannesReichard私はあなたを得ませんでした。そのパンダの質問以来、私はすべてのOPが期待されていると思います。データフレームを出力として得ることです。私は部分文字列しか見なかったので、将来の問題を避けるためにすべてをインポートしました。 – Dark

0

uはUnicodeを意味します - しかし、すべての文字がASCIIベースである場合 - あなただけのキャストstr()を使用することができ、英語の言語のように、ここではその出力は次のとおりです。

str(u'date') 
'date' 

私はそれはあなたの問題を解決すると思います。それはリストから始まるよう

+0

'str(" u'date '")'はまだ '' u'date' "'です。 – tripleee

+0

私はPython 2.7でそれを試しました。str( "u'date '")はちょうど' date 'です – ddor254

+1

あなたのPython 2.7は本当に正確ではありません。 https://ideone.com/85vV8K – tripleee

関連する問題