2016-11-03 7 views
1

私はデータベースからデータを取り出すためにvertica_pythonを使用しています。私はその後、分割し、それぞれのインデックスはセルであること、次の形式でExcelにこのおとり捜査を解析し、それをロードPythonを使用してデータを適切な列に整理する

[{"id":0,"prediction_type":"CONV_PROBABILITY","calibration_factor":0.906556,"inte cept":-2.410414,"advMatchTypeId":-0.239877,"atsId":-0.135568,"deviceTypeId":0.439130,"dmaCode":-0.251728,"keywordId":0.442240}] 

prediction_type CONV_PROBABILIT calibration_factor 0.90655 intercept -2.41041 advMatchTypeId -0.23987 atsId 1.44701 deviceTypeId 0.19701 dmaCode -0.69982 keywordId 0.44224 
私が引く列には、次の形式の文字列として来ます

ここに私の問題があります。文字列には明確なフォーマットがありません。つまり、文字列の一部の機能が不足していることがあります。

intercept -2.41041 advMatchTypeId -0.23987      deviceTypeId 0.37839  dmaCode -0.53552 keywordId 0.44224 
intercept -2.41041 advMatchTypeId -0.23987 atsId 0.80708 deviceTypeId -0.19573 dmaCode -0.69982 keywordId 0.44224 

これは私が使用しているコードは次のとおりです。私は、代わりにこのように見て出てくる、私が望むように書式設定を保持し、上記の例を持つことができますどのように

intercept -2.41041 advMatchTypeId -0.23987 deviceTypeId 0.37839 dmaCode -0.53552 keywordId 0.44224  
intercept -2.41041 advMatchTypeId -0.23987 atsId 0.80708 deviceTypeId -0.19573 dmaCode -0.69982 keywordId 0.44224 

:ここでは例です

data_all = cur.fetchall() 

for i in range(len(data_all)): 
    col = 0 
    data_one = ''.join(data_all[i]) 
    raw_coef = data_one.split(',')[1:len(data_all)] 
    for j in range(len(raw_coef)): 
     raw = ''.join(raw_coef[j]) 
     raw = re.sub('"|}|{|[|]|', '', raw)[:-1] 
     raw = raw.split(":") 
     for k in range(len(raw)): 
      worksheet.write(i, col, raw[k], align_left) 
      feature.append(raw[0]) # for unique values 
      col+=1 

マイクエリ:

cur.execute(
""" 
select MODEL_COEF 
from 

dcf_funnel.ADV_BIDDER_PRICING_LOG 
where MODEL_ID = 8960 
and DATE(AMP_QUERY_TIMESTAMP) = '11-02-2016' 
""" 
) 
+0

はあなたが現在のデータアップを分割し、Excelに書き込むために、それを整理するために使用するコードを追加してください。 – roganjosh

+0

それは良い、ありがとう。あなたは文字列を戻していない、あなたは辞書を含むリストを取得しています。あなたは文字列に変換しているように見えるし、正規表現を使用してすべてのバックアップを再び分割しようとしています。私は 'cursor'プロパティで何かをチェックする必要がありますし、何かを一緒に入れようとします。 – roganjosh

+0

あなたのコメントを正しく理解すれば、この列は単一の列から来ます。 – opamp

答えて

3

あなたはすべてのあなたの解析と利用パンダをスキップすることができます:それはPythonでdictsのリストがすでにある場合

import pandas 

このDATAFRAMEにあなたのクエリの結果を読み込みます。

data_all_list = [{"id":0,"prediction_type":"CONV_PROBABILITY","calibration_factor":0.906556,"intercept":-2.410414,"advMatchTypeId":-0.239877,"atsId":-0.135568,"deviceTypeId":0.439130,"dmaCode":-0.251728,"keywordId":0.442240}] 
df = pandas.DataFrame(data_all_list) 

あなたが本当に文字列を持っている場合は、あなただけのread_jsonを使用することができます。

data_all_str = """[{"id":0,"prediction_type":"CONV_PROBABILITY","calibration_factor":0.906556,"intercept":-2.410414,"advMatchTypeId":-0.239877,"atsId":-0.135568,"deviceTypeId":0.439130,"dmaCode":-0.251728,"keywordId":0.442240}]""" 
df = pandas.read_json(data_all_str) 

さらに考えは、あなたのdata_allが実際にdictsのリストのリストであることを理解することは、このような何か私をリードしてきました:

をこの場合
data_all_lol = [data_all_list, data_all_list] 

、あなたはデータフレームに渡す前にリストを連結する必要があります。

df = pandas.DataFrame(sum(data_all_lol, [])) 

これは、通常のヘッダ+値の形式で記述します:

df.to_csv('filename.csv') # you can also use to_excel 

あなたの最終的な目標は、ちょうどすべての機能の手段を得ることである場合は、パンダは任意の数字で、すぐにそれを行うことができます列で、正しく欠損値を扱う:

df.mean() 

advMatchTypeId  -0.239877 
atsId    -0.135568 
calibration_factor 0.906556 
deviceTypeId   0.439130 
dmaCode    -0.251728 
id     0.000000 
intercept   -2.410414 
keywordId    0.442240 
を与えます

曖昧さについての注意

あなたが表示さスニペットはリテラル構文でdictsのリストのように表示されますが、あなたは私が引く列として来て」と言うので、data_allのタイプを知ることは困難であるOPで文字列 "です。

お知らせ入力は、次のIPythonセッションで表現されている方法の違い:

In [15]: data_all_str 
Out[15]: '[{"id":0,"prediction_type":"CONV_PROBABILITY","calibration_factor":0.906556,"intercept":-2.410414,"advMatchTypeId":-0.239877,"atsId":-0.135568,"deviceTypeId":0.439130,"dmaCode":-0.251728,"keywordId":0.442240}]' 

In [16]: data_all_list 
Out[16]: 
[{'advMatchTypeId': -0.239877, 
    'atsId': -0.135568, 
    'calibration_factor': 0.906556, 
    'deviceTypeId': 0.43913, 
    'dmaCode': -0.251728, 
    'id': 0, 
    'intercept': -2.410414, 
    'keywordId': 0.44224, 
    'prediction_type': 'CONV_PROBABILITY'}] 
+0

ありがとう!しかし、これは文字列全体を単一のセルに入れます。私はその特徴と平均値の説明を得るためにそれを解析できる必要があります。したがって、各セルに固有の機能とその値が含まれているようにしたいと思います。 – opamp

+0

jsonに準拠した文字列からデータを読み取る方法を示す答えを更新しました。 dictsのリストよりも。 – chthonicdaemon

+2

@opampああ、今私にあなたの最後のコメントに基づいてあなたが意味するものを参照してください。最初のコード行は、 "{" id ":0、" predict_type ":" CONV_PROBABILITY "、" calibration_factor ":0.906556、" inte cept ":2.410414、" advMatchTypeId ":0.239877 、 "atsId": - 0.135568、 "deviceTypeId":0.439130、 "dmaCode": - 0.251728、 "keywordId":0.442240}] "" "あなたは本当に実際のデータ構造体の文字列を取得していましたが、あなたはそれを実際のリストとして報告し、あなたが 'string'という用語を誤って使用していたことを示唆しました。この回答はおそらくあなたにとっては正しいでしょう。 – roganjosh

関連する問題