如何用python数据框的列查询Dynamodb?

时间:2018-11-01 08:51:39

标签: python-3.x apache-spark-sql amazon-dynamodb

我可以使用以下代码使用具有固定值(300254)的id查询dynamodb:

response = table.query(
    KeyConditionExpression=Key('id').eq(300254)
for i in response['Items']:
    print(i['id'], ":", i['name'], ":", i['sal'])

但是,如果我想用下面的Python数据框(dfnew)替换硬编码值,如何在dynamodb中进行查询或扫描? dfnew具有3个字段id,name,sal和id是dynamodb中的主键。这可能吗?

dfnew = pd.read_csv("C:\\babynames.csv")
response = table.query(KeyConditionExpression=(Key('id').eq(dfnew.id))

上面的代码行未执行,失败。也没有给出适当的错误。这是“ dfnew.id”的正确方法还是需要进行任何更改?

response = table.query(KeyConditionExpression=(Key('id').eq(dfnew.iloc[0]['id']))) 

也尝试使用上面的行,但出现下面的错误。如何实现这一目标有帮助吗?

TypeError: cannot do positional indexing on <class 'pandas.core.indexes.range.RangeIndex'> with these indexers [id] of <class 'str'> 

谢谢。

1 个答案:

答案 0 :(得分:0)

我很少进行研究,并且下面的代码表现出色。可能对像我这样的人有帮助。

itemsList = []
for i in range(len(dfnew.loc[:, 'id'])):
    response = table.query(KeyConditionExpression=Key('id').eq(int(dfnew.at[i, 'id'])))
    itemsList += response['Items']
    df = pd.DataFrame(itemsList)

print("Record count:", df.count())
df.to_csv("C:\\outputs\\DynamoOutput.csv")

以上代码通过从我的输入数据帧(dfnew.id)中获取数据并以json格式给出响应来搜索Dynamodb的表。最终能够导出为CSV。