2017-08-11 6 views
1

Ich erhalte Daten aus einer Dynamodb-Tabelle, mit Boto3 für Python 2.7 und ich würde Pandas verwenden, um zu sortieren und sortieren die Daten.Verwenden Python Pandas zu behandeln AWS dynamodb Daten

Leider ist das dynamodb Datenformat ziemlich schwierig. Wie folgt aus:

data = [{ 
     u 'permaname': { 
     u 'S': u 'facebook' 
     }, 
     u 'uuid': { 
     u 'S': u '4b873085-c995-4ce4-9325-cfc70fcd4040' 
     }, 
     u 'tags': { 
     u 'L': [] 
     }, 
     u 'type': { 
     u 'S': u 'xxxxxx' 
     }, 
     u 'createdOn': { 
     u 'N': u '1502099627' 
     }, 
     u 'source': { 
     u 'S': u 'xxxxxxx' 
     }, 
     u 'data': { 
     u 'NULL': True 
     }, 
     u 'crawler': { 
     u 'S': u 'xxxxxxx' 
     } 
    }, { 
     u 'permaname': { 
     u 'S': u 'facebook' 
     }, 
     u 'uuid': { 
     u 'S': u '25381aef-a7db-4b79-b599-89fd060fcf73' 
     }, 
     u 'tags': { 
     u 'L': [] 
     }, 
     u 'type': { 
     u 'S': u 'xxxxxxx' 
     }, 
     u 'createdOn': { 
     u 'N': u '1502096901' 
     }, 
     u 'source': { 
     u 'S': u 'xxxxxxx' 
     }, 
     u 'data': { 
     u 'NULL': True 
     }, 
     u 'crawler': { 
     u 'S': u 'xxxxxxx' 
     } 
    }] 

meiner Gruppe zu tun, indem sie und sortieren stopft ich ein Pandas Objekt erstellen müssen, und ich kann nicht herausfinden, wie zu tun ist. Diese

ist, wie ich versuche:

obj = pandas.DataFrame(data) 
print list(obj.sort_values(['createdOn'],ascending=False).groupby('source')) 

Wenn ich obj wie folgt drucken:

print list(obj) 

ich habe:

[u'crawler 'u' createdOn ', u'data', upermaname ', u'source', u'tags ', u'type', u'uuid ']

Kann jemand das dataFrame obj mit den Dynamodb-Daten erstellen?

Antwort

0

ich in Python werde versuchen, 3.

data = [{ 
     'permaname': { 
     'S': 'facebook' 
     }, 
     'uuid': { 
     'S': '4b873085-c995-4ce4-9325-cfc70fcd4040' 
     }, 
     'tags': { 
     'L': [] 
     }, 
     'type': { 
     'S': 'xxxxxx' 
     }, 
     'createdOn': { 
     'N': '1502099627' 
     }, 
     'source': { 
     'S': 'xxxxxxx' 
     }, 
     'data': { 
     'NULL': True 
     }, 
     'crawler': { 
     'S': 'xxxxxxx' 
     } 
    }, { 
     'permaname': { 
     'S': 'facebook' 
     }, 
     'uuid': { 
     'S': '25381aef-a7db-4b79-b599-89fd060fcf73' 
     }, 
    'tags': { 
     'L': [] 
     }, 
     'type': { 
     'S': 'xxxxxxx' 
     }, 
     'createdOn': { 
     'N': '1502096901' 
     }, 
     'source': { 
     'S': 'xxxxxxx' 
     }, 
     'data': { 
     'NULL': True 
     }, 
     'crawler': { 
     'S': 'xxxxxxx' 
     } 
    }] 

Mit dynamodb_json wie zuvor vorgeschlagen antworten .

from dynamodb_json import json_util as json 
obj = pd.DataFrame(json.loads(data)) 
obj 

Mit Ausgabe:

crawler  createdOn data permaname source tags type uuid 
0 xxxxxxx  1502099627 None facebook xxxxxxx  [] xxxxxx 4b873085-c995-4ce4-9325-cfc70fcd4040 
1 xxxxxxx  1502096901 None facebook xxxxxxx  [] xxxxxxx  25381aef-a7db-4b79-b599-89fd060fcf73 

Gruppierung von (ich benutze max(), um Gesamtergebnisse)

obj.sort_values(['createdOn'],ascending=False).groupby('source').max() 

Mit Ausgabe

 crawler createdOn data permaname tags type uuid 
source       
xxxxxxx  xxxxxxx  1502099627 NaN  facebook [] xxxxxxx  4b873085-c995-4ce4-9325-cfc70fcd4040 

printig die Liste

print(list(obj)) 

Ausgang:

[u'crawler', u'createdOn', u'data', u'permaname', u'source', u'tags', u'type', u'uuid'] 

Ich hoffe, es hilft.