使用python的pandas来处理aws dynamodb数据

oxalkeyp  于 2023-11-15  发布在  Python
关注(0)|答案(3)|浏览(104)

我从dynamodb表中获取数据,使用python 2.7的boto3,我会使用pandas对数据进行分组和排序。
不幸的是dynamodb的数据格式是相当棘手的。像这样:

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

字符串
要做我的分组和排序的东西,我必须创建一个pandas对象,我不知道如何做。
我就是这么努力的:

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


如果我像这样打印obj:

print list(obj)


我有:
[u'crawler',u'createdOn',u'data',u'permaname',u'source',u'tags',u'type',u'uuid']
有人知道如何用dynamodb数据创建dataFrame对象吗?

j0pj023g

j0pj023g1#

我将尝试用Python 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'
      }
    }]

字符串
使用dynamodb_json,如前所述。

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


带输出:

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


mysql(我使用max()来聚合结果)

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


与输出

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


打印列表

print(list(obj))


输出量:

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


希望能帮上忙。

2izufjch

2izufjch2#

要将dynamodb json转换为常规json,您可以使用以下库:
https://github.com/Alonreznik/dynamodb-json

insrf1ej

insrf1ej3#

上面的dynamodb-json库对我来说似乎是坏的。利用Pandas和Python3,使用下面的代码可以转换为Excel格式。

file_name = 'filename.json'
with open(file_name, 'r') as f:
    data = f.readlines()
db = pd.DataFrame()
for line in data:
    item = json.loads(line)
    df = pd.DataFrame.from_dict(item['Item'])
    df_head = df.columns.to_list()
    db_head = db.columns.to_list()
    head = list(set(df_head + db_head))
    db = pd.DataFrame(db, columns=head)
    db = pd.concat([db, df], ignore_index=True)
print(db)
file_path = os.path.dirname(file_name)
file_name = os.path.basename(file_name)
file_name = file_name.replace('.json', '.xlsx')
file_path = f"{file_path}\\{file_name}"
db.to_excel(file_path, index=False)

字符串
这需要pandas和openpyxl库。对于其他格式,这应该可以转换为它们,比如字典,列表等。

相关问题